-
Couldn't load subscription status.
- Fork 3.8k
Description
Is there an existing issue for this?
- I have searched the existing issues
This issue exists in the latest npm version
- I am using the latest npm
Current Behavior
Starting from npm v10.3.0, optional dependencies for OS and CPU package variants are being pruned from package-lock.json when running npm install and a node_modules folder is present. This breaks npm installs when the resulting lockfile is pulled onto other platforms - such as devs working on their Macs (darwin/arm64) who are pushing their code to CI (linux/x64). This change in behaviour does not appear to be intentional as it is not documented or referenced anywhere. Possibly related to #7543. Possibly a dupe of #4828 and #7750.
The issue may be mitigated by deleting node_modules/ before running the install command.
Expected Behavior
Optional OS and CPU package variants should not be pruned from package-lock.json as was the behaviour prior to npm v10.3.0 to allow the lockfile to be used for cross-platform installs.
Steps To Reproduce
mkdir test && cd testnpm init -ynpm i -D rollup- Read
package-lock.json- observe 18 OS/CPU@rollup/*package variants are listed rm package-lock.jsonnpm i- Read
package-lock.json- observe only 1 OS/CPU@rollup/*package variant is now listed for the current platform
Expected behaviour test 1 ✅:
mkdir test && cd testnpm init -ynpm i -D rollup- Read
package-lock.json- observe 18 OS/CPU@rollup/*package variants are listed rm -rf node_modulesnpm i- Read
package-lock.json- observe 18 OS/CPU@rollup/*package variants are listed
Expected behaviour test 2 ✅:
mkdir test && cd testnpm init -ynpm i -D rollup- Read
package-lock.json- observe 18 OS/CPU@rollup/*package variants are listed npm i -D esbuild- Read
package-lock.json- observe 18 OS/CPU@rollup/*package variants are listed
Environment
- npm: 10.9.2
- Node.js: 22.17
- OS Name: macOS 14.5
- System Model Name: M1 Macbook Pro
- npm config:
; node bin location = /Users/xxx/.nvm/versions/node/v20.17.0/bin/node
; node version = v20.17.0
; npm local prefix = /Users/xxx/Projects/test
; npm version = 10.9.2
; cwd = /Users/xxx/Projects/test
; HOME = /Users/xxx
; Run `npm config ls -l` to show all defaults.