最近我尝试用Yarn安装我的Node包。它工作得很好,而且比NPM快得多。纱线自动生成NSButton
。我们已经有NPM shrinkwrap(yarn.lock
)。
它们之间有什么区别吗?
npm-shrinkwrap.json
比npm-shrinkwrap.json有什么优势吗?
答案 0 :(得分:47)
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
的比较,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回购中还有一堆明显的错误,所以我会等一个月左右。