[BUG] Wrong lock file modification for optional dependency
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 10.1k
- Forks
- 4.7k
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 19
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
Lock file is incorrect after updating optional dependency.
Steps to reproduce:
package.json
{
"name": "prisma-opt",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"optionalDependencies": {
"prisma": "^5.13.0"
},
"author": "",
"license": "ISC"
}
package-lock.json
{
"name": "prisma-opt",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "prisma-opt",
"version": "1.0.0",
"license": "ISC",
"optionalDependencies": {
"prisma": "^5.13.0"
}
},
`
I want to update prisma to 5.14.0 running:
npm i prisma@^5.14.0 --save-optional
(I also tried npm i prisma@^5.14.0 and npm i prisma@latest, same behaviour)
package.json (correct)
"optionalDependencies": {
"prisma": "^5.14.0"
}
package-lock.json (wrong)
{
"name": "prisma-opt",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "prisma-opt",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"prisma": "5.14.0"
},
"optionalDependencies": {
"prisma": "^5.14.0"
}
},
"dependencies": {
"prisma": "5.14.0"
},
Running npm install again (correct)
{
"name": "prisma-opt",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "prisma-opt",
"version": "1.0.0",
"license": "ISC",
"optionalDependencies": {
"prisma": "^5.14.0"
}
},
Expected Behavior
I do not expect that this change appears in the lock file:
"dependencies": {
"prisma": "5.14.0"
},
Or I do not expect that after npm install the change get's removed.
Steps To Reproduce
See "Current Behavior"
Please note: The steps to reproduce I have shared is a minimal application. This bug appears in my large application with having lot's of dev dependencies and optional dependencies, but we do not have production dependencies.
Environment
- npm: 10.7.0
- Node.js: Latest v18 (Also tested latest v22)
- OS Name: OSX
- System Model Name:
- npm config:
; copy and paste output from `npm config ls` here
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with the minimal package.json and package-lock.json shown, using npm 10.7.0 on Node.js 18 or 22. Compare the lock file after npm i prisma@^5.14.0 --save-optional with the result after a second npm install. Done means updating an optional dependency does not add a spurious root dependencies entry.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, node.js
- Domain
- cli, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100