npm5今天发布,其中一个新特性包括通过创建package-lock.json文件进行确定性安装。
这个文件应该保存在源代码管理中吗?
我假设它类似于yarn.lock和composer.lock,它们都应该保存在源代码控制中。
npm5今天发布,其中一个新特性包括通过创建package-lock.json文件进行确定性安装。
这个文件应该保存在源代码管理中吗?
我假设它类似于yarn.lock和composer.lock,它们都应该保存在源代码控制中。
当前回答
我不在项目中提交此文件。有什么意义?
它是生成的这是gitlab-ci.yml构建的gitlab中SHA1代码完整性错误的原因
虽然我确实从未在package.json中使用^作为libs,因为我有过不好的体验。
其他回答
将package-lock.json提交到源代码版本控制意味着项目将使用特定版本的依赖项,该依赖项可能与package.json中定义的依赖项相匹配,也可能与之不匹配。虽然依赖项具有特定版本,但如您所见,没有任何Caret(^)和Tilde(~),这意味着依赖项不会更新到最新版本。npm install将获取当前版本Angular所需的相同版本。
注意:package-lock.json强烈建议在CI期间将任何Caret(^)和Tilde(~)添加到要更新的依赖项时提交它。
是的,提交package-lock.json是一种标准做法。
提交package-lock.json的主要原因是项目中的每个人都使用相同的包版本。
赞成的意见:
如果您遵循严格的版本控制,并且不允许自动更新到主要版本,以避免在第三方包中发生向后不兼容的更改,那么提交包锁定会有很大帮助。如果您更新了一个特定的包,它会在package-lock.json中更新,并且使用存储库的每个人在接受您的更改时都会更新到该特定版本。
欺骗:
这会让你的拉取请求看起来很难看:)
npm安装无法确保项目中的每个人都使用相同的软件包版本。npm ci将对此有所帮助。
是的,您可以提交此文件。根据npm的官方文件:
对于npm修改node_modules树或package.json的任何操作,package-lock.json都会自动生成。它描述了生成的确切树,以便后续安装能够生成相同的树,而不考虑中间的依赖关系更新。此文件旨在提交到源存储库[.]中
我对npm的使用是生成缩小/放大的css/js,并生成django应用程序提供的页面所需的javascript。在我的应用程序中,Javascript在页面上运行以创建动画,有时执行ajax调用,在VUE框架内工作和/或使用css。如果package-lock.json对package.json中的内容有一些重写控制,那么可能需要有一个版本的该文件。根据我的经验,它要么不会影响npm install所安装的内容,要么会影响,到目前为止,据我所知,它还没有对我部署的应用程序产生不利影响。我不使用mongodb或其他传统的瘦客户端应用程序。
我从repo中删除package-lock.json因为npm安装会生成此文件,而npm安装是运行应用程序的每台服务器上部署过程的一部分。node和npm的版本控制是在每台服务器上手动完成的,但我要注意它们是相同的。
当npm安装在服务器上运行时,它会更改package-lock.json,如果服务器上的repo记录了文件的更改,则下一个部署WONT允许您从源位置提取新的更改。那就是无法部署,因为拉操作将覆盖对package-lock.json所做的更改。
您甚至不能用repo(重置硬源主机)上的内容覆盖本地生成的package-lock.json,因为如果package-llock.json由于npm安装而无法反映node_modules中的内容,从而破坏部署,那么当您发出命令时,npm会发出抱怨。现在,如果这表明node_modules中安装了稍微不同的版本,那么这再次不会给我带来问题。
如果node_modules不在您的repo中(而且不应该在),那么package-lock.json应该被忽略。
如果我遗漏了什么,请在评论中纠正我,但版本控制是从这个文件中提取的这一点毫无意义。package.json文件中有版本号,我假设这个文件是在npm安装发生时用来构建包的文件,当我删除它时,npm安装会如下所示:
jason@localhost:introcart_wagtail$ rm package.json
jason@localhost:introcart_wagtail$ npm install
npm WARN saveError ENOENT: no such file or directory, open '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'
但是,当安装node_modules或将npm应用于构建js/css时,如果删除package-lock.json,则不会产生任何抱怨
jason@localhost:introcart_wagtail$ rm package-lock.json
jason@localhost:introcart_wagtail$ npm run dev
> introcart@1.0.0 dev /home/jason/webapps/introcart_devtools/introcart_wagtail
> NODE_ENV=development webpack --progress --colors --watch --mode=development
10% building 0/1 modules 1 active ...
全局禁用package-lock.json
在终端中键入以下内容:
npm config set package-lock false
这对我来说真的很管用