最近,我尝试用Yarn安装我的Node包。它工作得很好,而且比NPM快得多。Yarn自动生成yarn.lock。我们已经有了NPM收缩包(npm-shrinkwrap.json)。
它们之间有什么不同吗?yarn.lock比npm-shenshwrap.json有优势吗?
发布于 2016-10-15 17:50:38
yarn.lock文件与其他包管理器的锁文件非常相似,尤其是Rust的Cargo包管理器,它具有Cargo.lock。这些锁文件的思想是表示一组应该始终有效的一致的包。
npm将依赖项范围存储在package.json文件中,这意味着当有人安装您的软件包时,他们可能会获得一组与您不同的依赖项,因为您可能正在运行过时的包(尽管它们仍然满足您指定的依赖项范围)。例如,某个指定了依赖项"foo": "^1.0.0"的人。他们可能实际上安装了foov1.0.1,因为这是他们运行npm install时的最新版本,但后来,有人安装了您的软件包并获得了依赖foov1.1.0。这可能会意外地破坏一些东西,如果你有一个yarn.lock文件来保证一致的包解析,就可以避免这种情况。
至于与npm shrinkwrap的比较,the documentation解释得非常清楚:
它类似于npm的npm-shenshwrap.json,但是它不是有损的,并且它创建了可重现的结果。
文档还建议将yarn.lock提交到您的存储库,如果您还没有这样做的话,这样您就可以获得一致和可重复的包解析的好处。This question还进一步解释了为什么应该这样做。
npm shrinkwrap的有损行为是由于npm本身使用的非确定性算法;正如另一个答案的评论中所述,npm shrinkwrap > npm install > npm shrinkwrap不能保证产生与只收缩一次相同的输出,而Yarn明确使用"an install algorithm that is deterministic and reliable"。
发布于 2016-10-15 17:52:18
它们之间有什么不同吗?
与npm shrinkwrap相比,Yarn遵循更具确定性的算法。如果您正在使用Yarn,则继续使用包络处理将与直觉相悖
你可以在documentation for yarn.lock中找到这个
它类似于npm的npm-shenshwrap.json,但是它不是有损的,并且它可以创建可重现的结果
然而,问题仍然存在,纱线是否已经准备好生产。GitHub代码库上还有一堆明显的bug,所以我会等一个月左右。
https://stackoverflow.com/questions/40057469
复制相似问题