Skip to content

Commit

Permalink
perf: prefer module.enableCompileCache over v8-compile-cache
Browse files Browse the repository at this point in the history
  • Loading branch information
merceyz committed Nov 17, 2024
1 parent d732259 commit df394a3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
2 changes: 2 additions & 0 deletions mkshims.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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`);

Expand Down
21 changes: 15 additions & 6 deletions sources/corepackUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -400,12 +400,15 @@ 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 [email protected] --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) {

Check failure on line 404 in sources/corepackUtils.ts

View workflow job for this annotation

GitHub Actions / Testing chores

Unnecessary { after 'if' condition
// Node.js segfaults when using npm@>=9.7.0 and v8-compile-cache
// $ docker run -it node:20.3.0-slim corepack [email protected] --version
// [SIGSEGV]
if (locator.name !== `npm` || semverLt(locator.reference, `9.7.0`))

Check failure on line 408 in sources/corepackUtils.ts

View workflow job for this annotation

GitHub Actions / Testing chores

Expected { after 'if' condition
// @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.
Expand All @@ -429,6 +432,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() {
Expand Down

0 comments on commit df394a3

Please sign in to comment.