npm install 的 --save 选项是什么
--save 曾用于把包写入 package.json 的 dependencies;自 npm 5.0(2017 年)起这已是默认行为,通常不必显式写 --save,但它仍可覆盖 save=false 等配置。常用的是 --save-dev(-D,写入 devDependencies)和 --save-exact(-E,锁定精确版本)。
--save 用于保存安装的依赖:npm 5.0 起保存已是默认行为,通常不必显式添加,但配置了 save=false 等情况时它仍会改变行为。 现在真正常用的相关选项是 -D(--save-dev)和 -E(--save-exact)。
现在的默认行为
npm install express # 默认保存新依赖;已有依赖类别和 npm 配置会影响位置
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;已有类别可保留,版本前缀受 save-prefix 等配置影响 |
-D, --save-dev |
写入 devDependencies |
-O, --save-optional |
写入 optionalDependencies |
-E, --save-exact |
精确版本,不带 ^ 或 ~ |
-g, --global |
安装到全局前缀,不向当前项目保存依赖 |
--no-save |
安装但不保存到 package.json,也不写 package-lock.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,或在容器镜像里装一次性调试工具。