Is there an existing issue for this?
This issue exists in the latest npm version
Current Behavior
We have a monorepo using npm workspaces, containing ~70 workspaces/packages.
We noticed that running npm exec --workspaces (for example, npm exec --workspaces --call 'pwd') at the top-level of this monorepo was incredibly slow - the npm process would be pegged at 100% CPU and it would take multiple seconds to print the directory path for each workspace.
The overall run time of npm exec --workspaces --call 'pwd' can take several minutes.
I was able to bisect NPM release versions to identify that this command was fast in version 8.7.0, but slow in version 8.8.0, so it appears that #4643 introduced the slowness (cc @ruyadorno). Indeed if I locally revert the change from that PR (modified revert due to subsequent changes from #5250), the performance issue disappears:
--- /Users/gavin/.nvm/versions/node/v16.17.0/lib/node_modules/npm/lib/commands/exec.js 2022-09-14 15:12:56.000000000 -0400
+++ /Users/gavin/.nvm/versions/node/v16.17.0/lib/node_modules/npm/lib/commands/exec-2.js 2022-09-14 15:12:37.000000000 -0400
@@ -25,7 +25,7 @@
async exec (_args, { locationMsg, runPath } = {}) {
// This is where libnpmexec will look for locally installed packages
- const localPrefix = this.npm.localPrefix
+ const localPrefix = runPath ? runPath : this.npm.localPrefix
Expected Behavior
npm exec --workspaces --call 'pwd' should very quickly (<2s) print out all workspace directories.
Steps To Reproduce
- In a large monorepo with ~70 workspaces
- With a default workspaces config
- Run
npm exec --workspaces --call 'pwd'
- See slowness
Environment
- npm: 8.19.2
- Node.js: 16.17.0
- OS Name: macOS 12.5.1
- System Model Name: Macbook Pro (2021 M1 Max)
- npm config:
; node bin location = /Users/gavin/.nvm/versions/node/v16.17.0/bin/node
; node version = v16.17.0
; npm local prefix = /Users/gavin/dev/league-web
; npm version = 8.19.2
; cwd = /Users/gavin/dev/league-web
; HOME = /Users/gavin
Is there an existing issue for this?
This issue exists in the latest npm version
Current Behavior
We have a monorepo using npm workspaces, containing ~70 workspaces/packages.
We noticed that running
npm exec --workspaces(for example,npm exec --workspaces --call 'pwd') at the top-level of this monorepo was incredibly slow - the npm process would be pegged at 100% CPU and it would take multiple seconds to print the directory path for each workspace.The overall run time of
npm exec --workspaces --call 'pwd'can take several minutes.I was able to bisect NPM release versions to identify that this command was fast in version 8.7.0, but slow in version 8.8.0, so it appears that #4643 introduced the slowness (cc @ruyadorno). Indeed if I locally revert the change from that PR (modified revert due to subsequent changes from #5250), the performance issue disappears:
Expected Behavior
npm exec --workspaces --call 'pwd'should very quickly (<2s) print out all workspace directories.Steps To Reproduce
npm exec --workspaces --call 'pwd'Environment