mirror of https://github.com/nodejs/corepack.git
perf: prefer `module.enableCompileCache` over `v8-compile-cache` (#574)
This commit is contained in:
parent
72ed05b775
commit
cba690575b
|
|
@ -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`);
|
||||
|
||||
|
|
|
|||
|
|
@ -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}'`);
|
||||
|
||||
// @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`))
|
||||
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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue