版本5中,npm引入了 package-lock.json 文件。
该文件旨在跟踪被安装的每个软件包的确切版本,以便产品可以以相同的方式被100%复制。(即使软件包的维护者更新了软件包)
package.json 问题
在 package.json 中通常做了锁定大版本的操作,这样在每次 npm instll 的时候都会拉取依赖包大版本下的最新的版本。这种机制最大的一个缺点就是当有依赖包有小版本更新时,可能会出现协同开发者的依赖包不一致的问题。
package-lock.json
这解决了 package.json 一直尚未解决的特殊问题。在 package.json 中,可以使用 semver 表示法设置要升级到的版本(补丁版本或次版本),例如:
- 如果写入的是
~0.13.0
,则只更新补丁版本:即0.13.1
可以,但0.14.0
不可以 - 如果写入的是 ^0.13.0 ,则要更新补丁版本和次版本:即
0.13.1
、0.14.0
、依次类推 - 如果写入的是
0.13.0
,则始终使用确切版本
补充说明:semver 是一种版本规范法,举例说明
在开发初期我们使用的vue版本声明定义 ‘vue: ^2.5.1’ ,某个阶段有新的开发加入我们团队,并且此时vue版本
已经升级到’2.6.1’,那么当他执行 npm install 时会根据 semver 版本规则安装版本,将会是
vue ^2.5.1 >= 2.5.1 <3.0.0。npm会选择安装 2.6.1 ,因为它在匹配版本范围内,且是最新的vue2版本,
"devDependencies": {
"fibers": ">= 3.1.1 <5.0.0",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vue-template-compiler": "^2.6.11",
"vuex": "^3.4.0"
}
package-lock.json
会固化当前安装的每个软件包的版本,当运行 npm install 时,npm 会使用这些确切的版本。相当于精确描述了 node_modules 目录下所有的包的树状依赖结构。 package-lock.json 文件需要被提交到Git仓库。
当运行 npm update 时,package-lock.json 文件中的依赖的版本会被更新。
相关文章
https://static.kancloud.cn/cyyspring/webpack/2304899
https://stackoverflow.com/questions/44297803/what-is-the-role-of-the-package-lock-json
http://nodejs.cn/learn/the-package-lock-json-file