From cba690575bd606faeee54bd512ccb8797d49055f Mon Sep 17 00:00:00 2001 From: "Kristoffer K." Date: Sat, 23 Nov 2024 11:40:37 +0100 Subject: [PATCH] perf: prefer `module.enableCompileCache` over `v8-compile-cache` (#574) --- mkshims.ts | 2 ++ sources/corepackUtils.ts | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/mkshims.ts b/mkshims.ts index 4adcd62fe..82849d9fc 100644 --- a/mkshims.ts +++ b/mkshims.ts @@ -22,6 +22,7 @@ async function main() { fs.writeFileSync(corepackPath, [ `#!/usr/bin/env node`, `process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='0';`, + `require('module').enableCompileCache?.();`, `require('./lib/corepack.cjs').runMain(process.argv.slice(2));`, ].join(`\n`)); fs.chmodSync(corepackPath, 0o755); @@ -34,6 +35,7 @@ async function main() { const entryScript = [ `#!/usr/bin/env node`, `process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'`, + `require('module').enableCompileCache?.();`, `require('./lib/corepack.cjs').runMain(['${binaryName}', ...process.argv.slice(2)]);`, ].join(`\n`); diff --git a/sources/corepackUtils.ts b/sources/corepackUtils.ts index 15e84056e..50a808808 100644 --- a/sources/corepackUtils.ts +++ b/sources/corepackUtils.ts @@ -400,12 +400,16 @@ export async function runVersion(locator: Locator, installSpec: InstallSpec & {s if (!binPath) throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`); - // Node.js segfaults when using npm@>=9.7.0 and v8-compile-cache - // $ docker run -it node:20.3.0-slim corepack npm@9.7.1 --version - // [SIGSEGV] - if (locator.name !== `npm` || semverLt(locator.reference, `9.7.0`)) - // @ts-expect-error - No types - await import(`v8-compile-cache`); + // @ts-expect-error - Missing types + if (!Module.enableCompileCache) { + // Node.js segfaults when using npm@>=9.7.0 and v8-compile-cache + // $ docker run -it node:20.3.0-slim corepack npm@9.7.1 --version + // [SIGSEGV] + if (locator.name !== `npm` || semverLt(locator.reference, `9.7.0`)) { + // @ts-expect-error - No types + await import(`v8-compile-cache`); + } + } // We load the binary into the current process, // while making it think it was spawned. @@ -429,6 +433,12 @@ export async function runVersion(locator: Locator, installSpec: InstallSpec & {s // Use nextTick to unwind the stack, and consequently remove Corepack from // the stack trace of the package manager. process.nextTick(Module.runMain, binPath); + + // @ts-expect-error - No types + if (Module.flushCompileCache) { + // @ts-expect-error - No types + setImmediate(Module.flushCompileCache); + } } export function shouldSkipIntegrityCheck() {