npm 5已于今天发布,其中一项新功能包括通过创建package- lock.json文件进行确定性安装。
package- lock.json
该文件应该保留在源代码管理中吗?
我假设它类似于yarn.lock和composer.lock,这两个都应该保留在源代码管理中。
yarn.lock
composer.lock
是的,package-lock.json旨在被检查到源代码管理中。如果您使用的是npm 5,则可能会在命令行上看到:created a lockfile as package-lock.json. You should commit this file.根据npm help package-lock.json:
package-lock.json
created a lockfile as package-lock.json. You should commit this file.
npm help package-lock.json
package- lock.json会为npm修改node_modules树或的任何操作自动生成package.json。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。 该文件旨在提交到源存储库中 ,并具有多种用途: 描述依赖关系树的单个表示,这样可以确保队友,部署和持续集成安装完全相同的依赖关系。 为用户提供一种工具,使其可以“时间旅行”到以前的状态,node_modules而不必提交目录本身。 为了通过可读的源代码控制差异更好地了解树的变化。 并允许npm跳过先前安装的软件包的重复元数据解析,从而优化安装过程。 关于package-lock.json它的一个关键细节是它无法发布,并且如果在顶级软件包之外的任何地方找到它,它将被忽略。它与npm- shrinkwrap.json(5)共享一种格式,该格式本质上是相同的文件,但允许发布。除非部署CLI工具或使用发布过程来生产生产软件包,否则不建议这样做。 如果软件包的根目录中同时存在package-lock.json和npm-shrinkwrap.json,package- lock.json将被完全忽略。
package- lock.json会为npm修改node_modules树或的任何操作自动生成package.json。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。
node_modules
package.json
该文件旨在提交到源存储库中 ,并具有多种用途:
描述依赖关系树的单个表示,这样可以确保队友,部署和持续集成安装完全相同的依赖关系。
为用户提供一种工具,使其可以“时间旅行”到以前的状态,node_modules而不必提交目录本身。
为了通过可读的源代码控制差异更好地了解树的变化。
并允许npm跳过先前安装的软件包的重复元数据解析,从而优化安装过程。
关于package-lock.json它的一个关键细节是它无法发布,并且如果在顶级软件包之外的任何地方找到它,它将被忽略。它与npm- shrinkwrap.json(5)共享一种格式,该格式本质上是相同的文件,但允许发布。除非部署CLI工具或使用发布过程来生产生产软件包,否则不建议这样做。
如果软件包的根目录中同时存在package-lock.json和npm-shrinkwrap.json,package- lock.json将被完全忽略。
npm-shrinkwrap.json