我们在所有确定性pkg安装中都使用了Thread,但不要阻止用户使用npm——我猜这两个文件都会导致问题。应该在您的应用程序中添加一个。GitDir?
正如其他地方所述,许多包管理系统(例如:composer和bundler)支持的依赖项锁文件应提交到链末项目的代码库中,以便每个试图运行该项目的人都使用经过测试的依赖项集。
不太清楚锁文件是否应该总是提交到打算包含在其他项目中的包中(在这些项目中,希望有更宽松的依赖关系)。然而,Yarn和NPM(由@Cyrille覆盖)在必要时智能地分别忽略yarn.lock
和package-lock.json
,从而确保始终提交这些锁文件的安全性。
因此,您应该始终至少提交一个线程。锁
或包锁。json
取决于您使用的包管理器。
目前,我们有两个不同的包管理系统,它们都从package.json
安装相同的依赖集,但是它们从两个不同的锁文件生成和读取。NPM 5生成package-lock.json
,而Yarn生成yarn.lock
。
如果您提交包锁。json
然后,您正在构建对使用NPM 5安装依赖项的人的支持。如果您提交纱线。锁定
,您正在构建对使用Thread安装依赖项的人员的支持。
您是否选择提交yarn.lock
或package-lock.json
或两者都选择取决于在您的项目中开发的人员是否只使用Yarn或NPM 5或两者都使用。如果您的项目是开源的,那么最有利于社区的事情可能是提交这两个项目,并有一个自动化的过程来确保yarn.lock
和package-lock.json
始终保持同步。
更新:纱线现在引入了import
命令,该命令将生成纱线。从
包锁锁定
文件。json文件。这对于保持两个文件的同步非常有用。(谢谢@weakish)
在纱线项目中详细讨论了这些问题:
现在两个都关门了。
您应该提交1个依赖关系树锁文件,但不应该同时提交这两个文件。这也需要对纱线或npm(并非两者)进行标准化,以建立和开发项目。
这是一篇关于为什么是纱线的文章。如果你对纱线进行标准化,就应该提交锁。
如果您同时提交线程。锁定
文件和
包锁。json
文件这两个文件有很多方法可以提供不同的依赖关系树(即使Thread和npm的树解析算法相同),确保它们提供完全相同的答案是非常重要的。因为这是非常重要的,所以不太可能在两个文件中都维护相同的依赖关系树,并且您不希望根据构建是使用Thread还是npm完成的而有不同的行为。
如果纱线从使用yarn.lock
切换到package-lock.json
(这里有问题),那么提交锁文件的选择变得很容易,我们不再需要担心纱线和npm导致不同的构建。基于这篇博文,这是一个我们不应该很快期待的变化(博文还描述了yarn.lock
和package-lock.json
之间的区别。
我也在想同样的问题。以下是我的想法,希望能有所帮助:
npm包锁。json文档说明如下:
这很棒,因为它防止了“在我的机器上工作”的效果。
如果没有这个文件,如果你npm安装-保存A
,npm将在你的package.json
中添加"A":"^1.2.3"
。当其他人在您的项目上运行npm安装
时,可能已经发布了A
的版本1.2.4
。因为它是满足package.json
中指定的Semver范围的最新可用版本,所以它将安装此版本。但是如果这个版本中引入了一个新的错误呢?这个人会有一个问题,你不能复制,因为你有以前的版本,没有任何错误。
通过修复节点\u模块
目录的状态,包锁。json文件防止了这个问题,因为每个人都有相同版本的每个包。
但是,如果您正在编写和发布一个npm模块呢?留档说明如下:
关于包锁的一个关键细节。json是不能发布的,如果在顶级包以外的任何地方找到它,它将被忽略。
因此,即使您提交了它,当用户安装您的模块时,他/她也不会获得包锁。json
文件,但仅包含包。json文件。因此,npm将安装满足所有依赖项的semver范围的最新版本。这意味着您总是希望使用这些依赖项的版本来测试模块,而不是在开始编写模块时安装的版本。因此,在这种情况下,
包锁。json显然毫无用处。更重要的是,这可能会让人恼火。