npm install 的 --save 选项是什么
--save 曾用于把包写入 package.json 的 dependencies;自 npm 5.0(2017 年)起这已是默认行为,--save 成为无意义的历史遗留。常用的是 --save-dev(-D,写入 devDependencies)和 --save-exact(-E,锁定精确版本)。
--save 是个过时的选项:npm 5.0 之前需要它把安装的包写进 package.json 的 dependencies;npm 5.0 之后这就是默认行为,--save 写不写都一样。 现在真正常用的相关选项是 -D(--save-dev)和 -E(--save-exact)。
现在的默认行为
npm install express # 自动写入 dependencies(等价于过时的 --save)
npm install -D jest # 写入 devDependencies
npm install -E lodash # 保存本次解析出的精确版本(不带 ^)
npm install --save-optional x # 写入 optionalDependencies
历史背景
npm 5.0(2017 年)之前,npm install express 只把包装到 node_modules 而不改 package.json,需要 npm install express --save 才记录依赖——忘记加 --save 是当时最常见的"我机器上能跑"事故。npm 5 把保存改为默认,--save 就此沦为无害的空操作,只在老教程里还能看到。
实用选项速查
| 选项 | 作用 |
|---|---|
| (默认) | 写入 dependencies,版本带 ^ |
-D, --save-dev |
写入 devDependencies |
-O, --save-optional |
写入 optionalDependencies |
-E, --save-exact |
精确版本,不带 ^ 或 ~ |
-g, --global |
全局安装,不改 package.json |
--no-save |
只装到 node_modules,不写 package.json |
常见问题(FAQ)
Q:老教程里的 --save 要不要照抄?
不用,去掉即可。它不会报错,只是什么都不做。
Q:^ 和 ~ 前缀是什么?
^4.17.1 允许升级到 4.x 最新(向后兼容),~4.17.1 只允许 4.17.x 补丁更新。想完全锁定用 -E 保存精确版本,配合 package-lock.json 双保险。
Q:--no-save 什么时候用?
临时试验某个包不想污染 package.json,或在容器镜像里装一次性调试工具。