yarn.lock和npm的收缩包装有什么区别?
最近,我尝试使用Yarn安装Node软件包。它运作良好,并且比NPM快得多。纱线自动生成yarn.lock
。我们已经有NPM收缩包装(npm-
shrinkwrap.json)。
它们之间有什么区别吗?是否yarn.lock
有过NPM-shrinkwrap.json什么优势?
回答:
该yarn.lock
文件与其他程序包管理器的锁定文件非常相似,尤其是Rust的Cargo程序包管理器具有Cargo.lock
。这些锁定文件的想法是代表一组始终有效的软件包。
npm
将依赖关系范围存储在package.json
文件中,这意味着当有人安装您的软件包时,他们可能会获得与您不同的依赖关系集,因为您可能正在运行过时的软件包(尽管它们仍然满足您指定的依赖关系范围)。例如,某人指定了dependency"foo": "^1.0.0"
。他们可能实际上已经安装了foo v1.0.1,因为这是他们运行时的最新npminstall
版本,但是后来,有人安装了您的软件包并获得了依赖项foo v1.1.0。这可能会意外破坏某些内容,如果您有一个yarn.lock
保证
的文件,可以避免这种情况。
至于与的比较npm shrinkwrap
,文档非常清楚地说明了这一点:
它类似于npm的npm-shrinkwrap.json,但是它不是有损的,并且可以产生可重复的结果。
该文档还建议yarn.lock
您提交到存储库(如果您尚未这样做的话),这样您就可以从一致且可重复的包解析中受益。
的有损行为npm shrinkwrap
是由于其npm
自身使用的不确定性算法;作为另一个答案的评论指出,npm shrinkwrap
> npminstall
> npmshrinkwrap
并不能保证产生输出作为刚刚shrinkwrapping一次,而纱线明确地使用相同“的安装算法是确定的,可靠的”。
以上是 yarn.lock和npm的收缩包装有什么区别? 的全部内容, 来源链接: utcz.com/qa/400768.html