首先关于 package.json 文件
- 如果写入的是
〜0.13.0,则只更新补丁版本:即0.13.1可以,但0.14.0不可以。 - 如果写入的是
^0.13.0,则要更新补丁版本和次版本:即0.13.1、0.14.0、依此类推。 - 如果写入的是
0.13.0,则始终使用确切的版本。
package-lock.json 的作用
package-lock.json 会固化当前安装的每个软件包的版本,当运行 npm install时,npm 会使用这些确切的版本。
依赖如何更新?
- 如果只有一个 package.json 文件,运行
npm i会根据它生成一个 package-lock.json 文件。 - 如果 package.json 的 semver-range version 和 package-lock.json 中版本兼容,即使此时 package.json 中有新的版本,执行
npm i也还是会根据 package-lock.json 下载。 - 如果手动修改了 package.json 的 version ranges,且和 package-lock.json 中版本不兼容,那么执行
npm i时 package-lock.json 将会更新到兼容 package.json 的版本。
注意
- 构建部署推荐:
npm ci --cache .npm --quiet --no-progress cnpm isntall不会生成package-lock.json文件
总结
package-lock 文件的作用曾经引发争议并导致多次 npm i 规则的变更。目前看来,package-lock 文件能够解决多人开发安装依赖不同可能存在的问题。但是 package-lock 并非是不变的,比如正常项目开发中,package.json 添加依赖,就会导致 package-lock.json 的更新。