cli icon indicating copy to clipboard operation
cli copied to clipboard

[BUG] npm --save-dev does not infer --save

Open mattpen opened this issue 3 years ago • 4 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

This issue exists in the latest npm version

  • [X] I am using the latest npm

Current Behavior

When I run npm install --save-dev <package-name> package.json is not modified; nothing is added to devDependencies.

Expected Behavior

I would expect that a command like npm install --save-dev <package-name> would install that package in the current directory and add the package information in package.json's devDepencies object.

Steps To Reproduce

  1. In this environment...
[~/test]$ npm -v
8.15.0
[~/test]$ node -v 
v18.7.0
[~/test]$ sw_vers
ProductName:	macOS
ProductVersion:	12.4
BuildVersion:	21F79
  1. With this config...
$ npm config list
package-lock = false 
save = false 
save-exact = false 
save-prefix = "^" 
  1. Run '...'
[~/test]$ rm -rf package.json 
[~/test]$ rm -rf node_modules 
[~/test]$ npm init -y
Wrote to /Users/matt/test/package.json:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


[~/test]$ npm install --save-dev mocha

added 79 packages, and audited 80 packages in 6s

20 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
[~/test]$ cat package.json 
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
[~/test]$
  1. See error... devDependencies does not exist as expected.

Environment

  • npm: 8.15.0
  • Node.js: 18.7.0
  • OS Name: macOS 12.4
  • System Model Name:
  • npm config:
package-lock = false 
save = false 
save-exact = false 
save-prefix = "^" 

mattpen avatar Aug 08 '22 23:08 mattpen

You set save to false - i wonder if that's overriding it?

ljharb avatar Aug 09 '22 00:08 ljharb

You set save to false - i wonder if that's overriding it?

That might be it. npm i --save --save-dev <package-name> seems to work, thanks @ljharb. I assumed --save-dev would imply --save.

mattpen avatar Aug 09 '22 03:08 mattpen

I think it's reasonable to assume it would, and I think it's arguable that it's a bug in npm that save-dev/save-peer/etc do not imply --save (in the same way that --package-lock-only implies --package-lock)

ljharb avatar Aug 09 '22 04:08 ljharb

PR updated to resolve this issue: https://github.com/npm/cli/pull/7233

ficocelliguy avatar Feb 19 '24 23:02 ficocelliguy