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,或在容器镜像里装一次性调试工具。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台