package-lock.json
关于 package-lock.json,你需要知道的一些事情
- 若是你使用的
npm 5.0.0
及以上的版本,package-lock.json
会默认自动生成。 - 你应该使用
package-lock.json
来确保一致的安装和兼容的依赖关系。 - 你应该将
package-lock.json
提交到源代码仓库
npm 5.0.0 以后的版本变化
参考: npm install 生成的package-lock.json是什么文件?有什么用?open in new window
npm 5.x
发布以来到现在的npm 5.6.0
,lock
的作用变更过好多次。从npm 3.x
更新到了npm 5
,但是发现执行npm i
时的现象跟网络上的科普文不太一致。
有提到不管怎么修改package.json
文件,重复执行npm i
,npm
都会根据package-lock.json
文件描述的版本信息进行下载。 也有提到重复npm i
时,npm
会不顾package-lock.json
的信息, 根据package.json
中的包 Semantic versioning 版本信息下载更新模块(package-lock.json
貌似没啥用了)。
查阅资料得知,自npm 5.0
版本发布以来,npm i
的规则发生了三次变化。
npm 5.0.x
版本,不管package.json
怎么变,npm i
时都会根据package-lock.json
文件下载。 package-lock.json file not updated after package.json file is changed · Issue #16866 · npm/npmopen in new window这个issue
控诉了这个问题,明明手动改了package.json
,为啥不给我升级包!然后就导致了npm 5.1.0
的问题。npm 5.1.0
版本后npm i
会无视package-lock.json
文件,而是去下载最新的包。然后就有人提了这个issue
why is package-lock being ignored? · Issue #17979 · npm/npmopen in new window控诉这个问题,最后演变成npm 5.4.2
版本后的规则。npm 5.4.2
版本后,why is package-lock being ignored? · Issue #17979 · npm/npmopen in new window。大致意思是,如果改了package.json
,且package.json
和package-lock.json
文件不同,那么执行npm i
时npm
会根据package.json
中的版本号以及语义含义去下载最新的包,并更新至package-lock.json
。如果两者是同一状态,那么执行npm i
都会根据package-lock.json
下载,不会理会package.json
实际包的版本是否有新。