perf: prefer `module.enableCompileCache` over `v8-compile-cache` (#574)

This commit is contained in:
Kristoffer K. 2024-11-23 11:40:37 +01:00 committed by GitHub
parent 72ed05b775
commit cba690575b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 6 deletions

View File

@ -22,6 +22,7 @@ async function main() {
fs.writeFileSync(corepackPath, [ fs.writeFileSync(corepackPath, [
`#!/usr/bin/env node`, `#!/usr/bin/env node`,
`process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='0';`, `process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='0';`,
`require('module').enableCompileCache?.();`,
`require('./lib/corepack.cjs').runMain(process.argv.slice(2));`, `require('./lib/corepack.cjs').runMain(process.argv.slice(2));`,
].join(`\n`)); ].join(`\n`));
fs.chmodSync(corepackPath, 0o755); fs.chmodSync(corepackPath, 0o755);
@ -34,6 +35,7 @@ async function main() {
const entryScript = [ const entryScript = [
`#!/usr/bin/env node`, `#!/usr/bin/env node`,
`process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'`, `process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'`,
`require('module').enableCompileCache?.();`,
`require('./lib/corepack.cjs').runMain(['${binaryName}', ...process.argv.slice(2)]);`, `require('./lib/corepack.cjs').runMain(['${binaryName}', ...process.argv.slice(2)]);`,
].join(`\n`); ].join(`\n`);

View File

@ -400,12 +400,16 @@ export async function runVersion(locator: Locator, installSpec: InstallSpec & {s
if (!binPath) if (!binPath)
throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`); throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`);
// @ts-expect-error - Missing types
if (!Module.enableCompileCache) {
// Node.js segfaults when using npm@>=9.7.0 and v8-compile-cache // 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 // $ docker run -it node:20.3.0-slim corepack npm@9.7.1 --version
// [SIGSEGV] // [SIGSEGV]
if (locator.name !== `npm` || semverLt(locator.reference, `9.7.0`)) if (locator.name !== `npm` || semverLt(locator.reference, `9.7.0`)) {
// @ts-expect-error - No types // @ts-expect-error - No types
await import(`v8-compile-cache`); await import(`v8-compile-cache`);
}
}
// We load the binary into the current process, // We load the binary into the current process,
// while making it think it was spawned. // 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 // Use nextTick to unwind the stack, and consequently remove Corepack from
// the stack trace of the package manager. // the stack trace of the package manager.
process.nextTick(Module.runMain, binPath); process.nextTick(Module.runMain, binPath);
// @ts-expect-error - No types
if (Module.flushCompileCache) {
// @ts-expect-error - No types
setImmediate(Module.flushCompileCache);
}
} }
export function shouldSkipIntegrityCheck() { export function shouldSkipIntegrityCheck() {