yarn.lock和npm shrinkwrap有什么区别?
最近我尝试用纱线安装我的节点包。 它工作的很好,比NPM快很多。 yarn
自动产生yarn.lock
。 我们已经有了NPM shrinkwrap( npm-shrinkwrap.json
)。
他们之间有什么区别? yarn.lock
比npm- yarn.lock
有什么优势吗?
yarn.lock
文件与其他软件包pipe理器的锁文件非常相似,尤其是Rust的Cargo包pipe理器,它具有Cargo.lock
。 这些锁文件的想法是代表一套始终有效的软件包。
npm
在package.json
文件中存储依赖范围,这意味着当有人安装你的包时,他们可能会得到一组不同的依赖关系,因为你可能正在运行过时的包(尽pipe它们仍然满足你指定的依赖范围)。 以例如指定依赖项"foo": "^1.0.0"
人为例"foo": "^1.0.0"
。 他们实际上可能已经安装了foo v1.0.1,因为这是最新的,当他们运行npm install
,但稍后有人会安装你的软件包并获得依赖关系foo v1.1.0。 这可能会意外地破坏一些东西,如果你有一个yarn.lock
文件,它可以保证一致的包parsing度 ,这是可以避免的。
至于与npm shrinkwrap
比较, 文件非常清楚地解释:
这与npm的npm-shrinkwrap.json类似,但是它不是有损的,它会产生可重现的结果。
如果你还没有这样做,那么这个文档还build议把yarn.lock
提交给你的仓库,这样你就可以享受到一致的,可重复的包装解决scheme的好处。 这个问题也解释了为什么你应该这样做。
npm shrinkwrap
的有损行为是由npm
本身使用的非确定性algorithm造成的; 如另一个答案的注释中所述, npm shrinkwrap
> npm install
> npm shrinkwrap
不能保证产生与只收缩一次相同的输出,而Yarn明确地使用“确定性和可靠性的安装algorithm” 。
他们之间有什么区别吗?
与npm shrinkwrap
相比,纱线遵循更确定的algorithm。 如果你使用Yarn,继续使用shrinkwrap将是违反直觉的
你可以在yarn.lock
的文档中find它:
这与npm的npm-shrinkwrap.json类似,但是它不是有损的,它会产生可重现的结果
然而,纱线是否已经准备就绪仍然存在。 在GitHub仓库中仍然有一些明显的漏洞,所以我会等待一个月左右。