fix(exec): add missing node-options to recursive run (#9264)

* fix(run): add missing `node-options` to `recursive`

Fixes https://github.com/pnpm/pnpm/issues/9180

* refactor: share code

* refactor: remove unused field
This commit is contained in:
Khải
2025-03-11 08:52:59 +07:00
committed by GitHub
parent cda1c43dad
commit 57f989ef45
3 changed files with 38 additions and 6 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/plugin-commands-script-runners": patch
"pnpm": patch
---
Add the missing `node-options` config to `recursive run` [#9180](https://github.com/pnpm/pnpm/issues/9180).

View File

@@ -202,6 +202,13 @@ export async function handler (
await runDepsStatusCheck(opts)
}
if (opts.nodeOptions) {
opts.extraEnv = {
...opts.extraEnv,
NODE_OPTIONS: opts.nodeOptions,
}
}
if (opts.recursive) {
if (scriptName || Object.keys(opts.selectedProjectsGraph).length > 1) {
return runRecursive(params, opts) as Promise<undefined>
@@ -258,15 +265,10 @@ so you may run "pnpm -w run ${scriptName}"`,
}
const concurrency = opts.workspaceConcurrency ?? 4
const extraEnv = {
...opts.extraEnv,
...(opts.nodeOptions ? { NODE_OPTIONS: opts.nodeOptions } : {}),
}
const lifecycleOpts: RunLifecycleHookOptions = {
depPath: dir,
extraBinPaths: opts.extraBinPaths,
extraEnv,
extraEnv: opts.extraEnv,
pkgRoot: dir,
rawConfig: opts.rawConfig,
rootModulesDir: await realpathMissing(path.join(dir, 'node_modules')),

View File

@@ -1061,3 +1061,27 @@ test('pnpm recursive run report summary with --bail', async () => {
expect(executionStatus[path.resolve('project-4')].status).toBe('queued')
expect(executionStatus[path.resolve('project-5')].status).toBe('skipped')
})
test('pnpm recursive run with custom node-options', async () => {
preparePackages([
{
name: 'project-1',
version: '1.0.0',
scripts: {
build: 'node -e "assert.strictEqual(process.env.NODE_OPTIONS, \'--max-old-space-size=1200\')"',
},
},
])
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
await run.handler({
...DEFAULT_OPTS,
allProjects,
dir: process.cwd(),
nodeOptions: '--max-old-space-size=1200',
recursive: true,
selectedProjectsGraph,
workspaceDir: process.cwd(),
}, ['build'])
})