yarn.lock和npm&#39的收缩包装有什么区别?

时间:2016-10-15 09:42:22

标签: node.js npm yarnpkg

最近我尝试用Yarn安装我的Node包。它工作得很好,而且比NPM快得多。纱线自动生成NSButton。我们已经有NPM shrinkwrap(yarn.lock)。

它们之间有什么区别吗? npm-shrinkwrap.json比npm-shrinkwrap.json有什么优势吗?

2 个答案:

答案 0 :(得分:47)

yarn.lock文件与其他软件包管理器的锁文件非常相似,尤其是Rust的Cargo软件包管理器,其中包含Cargo.lock。这些锁文件的概念是代表一组始终有效的一致的包。

npmpackage.json文件中存储依赖关系范围,这意味着当有人安装您的软件包时,他们可能会获得一组不同的依赖关系,因为您可能正在运行过时的软件包(尽管它们是仍满足您指定的依赖范围)。例如,指定了依赖项"foo": "^1.0.0"的人。他们可能实际安装了foo v1.0.1,因为这是他们运行npm install时的最新版本,但稍后,有人会安装你的软件包并获得依赖关系foo v1.1.0。这可能会意外地破坏某些内容,如果您有yarn.lock文件可以保证一致的包解析,则可以避免这种情况。

至于与npm shrinkwrap的比较,the documentation非常清楚地解释了这一点:

  

它类似于npm的npm-shrinkwrap.json,但它不是有损的,它可以产生可重复的结果。

如果您尚未执行此操作,文档还建议将yarn.lock提交到您的存储库,这样您就可以获得一致且可重现的包解析的好处。 This question还解释了为什么要这样做。

npm shrinkwrap的有损行为是由npm本身使用的非确定性算法引起的;正如另一个答案的评论所述,npm shrinkwrap> npm install> npm shrinkwrap不能保证产生与仅一次收缩包装相同的输出,而Yarn明确使用"an install algorithm that is deterministic and reliable"

答案 1 :(得分:5)

  

他们之间有什么区别

npm shrinkwrap相比,纱线遵循更确定的算法。如果您正在使用Yarn,继续使用shrinkwrap会违反直觉

您可以在documentation for yarn.lock

中找到
  

它类似于npm的npm-shrinkwrap.json,但它不是有损的,它可以创建可重复的结果

然而,问题仍然是纱线是否已准备就绪。在GitHub回购中还有一堆明显的错误,所以我会等一个月左右。