59

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

它们之间有什么区别吗?与 npm- shrinkwrap.jsonyarn.lock相比有什么优势吗?

4

2 回答 2

55

yarn.lock文件与其他包管理器的锁定文件非常相似,尤其是 Rust 的 Cargo 包管理器,它具有Cargo.lock. 这些锁文件的想法是代表一组应该始终工作的一致的包。

npm在文件中存储依赖范围package.json,这意味着当有人安装您的包时,他们可能会得到一组不同的依赖项给您,因为您可能正在运行过时的包(尽管它们仍然满足您指定的依赖范围)。举个例子,某人指定了依赖项"foo": "^1.0.0"。他们可能实际上已经安装了 foo v1.0.1,因为那是他们运行时的最新npm install版本,但后来,有人安装了您的包并获得了依赖项 foo v1.1.0。这可能会意外破坏某些东西,如果您有一个保证一致的包分辨率yarn.lock的文件,则可以避免这种情况。

至于与 的比较npm shrinkwrap文档解释得很清楚:

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

该文档还建议提交yarn.lock到您的存储库,如果您还没有这样做,那么您可以获得一致且可重现的包解析的好处。这个问题还进一步解释了为什么你应该这样做。

的有损行为npm shrinkwrap是由于其自身使用的非确定性算法所致npm;正如另一个答案的评论中所述,npm shrinkwrap>>npm install不能npm shrinkwrap保证产生与只进行一次收缩包装相同的输出,而 Yarn 明确使用“确定性和可靠的安装算法”

于 2016-10-15T09:50:38.407 回答
5

它们之间有什么区别吗

npm shrinkwrap. 如果您使用 Yarn,继续使用收缩包装将违反直觉

您可以在以下文档中yarn.lock找到:

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

然而,问题仍然存在,纱线是否已准备好生产。GitHub repo 上仍然存在许多明显的错误,所以我会等待一个月左右。

于 2016-10-15T09:52:17.663 回答