yarn.lock 和 npm 的 shrinkwrap 有什么区别?
What is the difference between yarn.lock and npm's shrinkwrap?
最近我尝试用 Yarn 安装我的 Node 包。它工作得很好,而且比 NPM 快很多。 Yarn自动生成yarn.lock
。我们已经有了 NPM shrinkwrap (npm-shrinkwrap.json
)。
它们之间有什么区别吗?
yarn.lock
比 npm-shrinkwrap.json 有什么优势吗?
yarn.lock
文件与其他包管理器的锁文件非常相似,尤其是 Rust 的 Cargo 包管理器,它有 Cargo.lock
。这些锁定文件的想法是代表一组应该始终有效的一致包。
npm
将依赖项 运行ges 存储在 package.json
文件中,这意味着当有人安装您的软件包时,他们可能会获得一组与您不同的依赖项,因为您可能是 运行 过时的软件包(尽管它们仍然满足您指定的依赖性 运行ge)。举个例子,有人指定了依赖关系 "foo": "^1.0.0"
。他们可能实际上已经安装了 foo v1.0.1,因为那是他们 运行 npm install
时的最新版本,但后来有人安装了您的软件包并获得了依赖项 foo v1.1.0。这可能会意外地破坏某些东西,如果你有一个 yarn.lock
文件 gua运行tees 一致的包解析.
至于和npm shrinkwrap
对比,the documentation解释的很清楚:
It’s similar to npm’s npm-shrinkwrap.json, however it’s not lossy and it creates reproducible results.
该文档还建议将 yarn.lock
提交到您的存储库(如果您尚未这样做),这样您就可以获得一致且可重现的包解析的好处。 还进一步解释了为什么要这样做。
npm shrinkwrap
的有损行为是由于 npm
本身使用的非确定性算法;正如另一个答案的评论中所述,npm shrinkwrap
> npm install
> npm shrinkwrap
不保证 运行 产生与收缩包装一次相同的输出,而 Yarn 明确使用 "an install algorithm that is deterministic and reliable".
Is there any difference between them
与 npm shrinkwrap
相比,Yarn 遵循更具确定性的算法。如果您使用的是 Yarn,继续使用 shrinkwrap 会违反直觉
您可以在 documentation for yarn.lock
:
中找到它
It’s similar to npm’s npm-shrinkwrap.json, however it’s not lossy and it creates reproducible results
然而,问题仍然是纱线是否已准备好投入生产。 GitHub 存储库中仍然存在大量明显的错误,所以我会等待一个月左右。
最近我尝试用 Yarn 安装我的 Node 包。它工作得很好,而且比 NPM 快很多。 Yarn自动生成yarn.lock
。我们已经有了 NPM shrinkwrap (npm-shrinkwrap.json
)。
它们之间有什么区别吗?
yarn.lock
比 npm-shrinkwrap.json 有什么优势吗?
yarn.lock
文件与其他包管理器的锁文件非常相似,尤其是 Rust 的 Cargo 包管理器,它有 Cargo.lock
。这些锁定文件的想法是代表一组应该始终有效的一致包。
npm
将依赖项 运行ges 存储在 package.json
文件中,这意味着当有人安装您的软件包时,他们可能会获得一组与您不同的依赖项,因为您可能是 运行 过时的软件包(尽管它们仍然满足您指定的依赖性 运行ge)。举个例子,有人指定了依赖关系 "foo": "^1.0.0"
。他们可能实际上已经安装了 foo v1.0.1,因为那是他们 运行 npm install
时的最新版本,但后来有人安装了您的软件包并获得了依赖项 foo v1.1.0。这可能会意外地破坏某些东西,如果你有一个 yarn.lock
文件 gua运行tees 一致的包解析.
至于和npm shrinkwrap
对比,the documentation解释的很清楚:
It’s similar to npm’s npm-shrinkwrap.json, however it’s not lossy and it creates reproducible results.
该文档还建议将 yarn.lock
提交到您的存储库(如果您尚未这样做),这样您就可以获得一致且可重现的包解析的好处。
npm shrinkwrap
的有损行为是由于 npm
本身使用的非确定性算法;正如另一个答案的评论中所述,npm shrinkwrap
> npm install
> npm shrinkwrap
不保证 运行 产生与收缩包装一次相同的输出,而 Yarn 明确使用 "an install algorithm that is deterministic and reliable".
Is there any difference between them
与 npm shrinkwrap
相比,Yarn 遵循更具确定性的算法。如果您使用的是 Yarn,继续使用 shrinkwrap 会违反直觉
您可以在 documentation for yarn.lock
:
It’s similar to npm’s npm-shrinkwrap.json, however it’s not lossy and it creates reproducible results
然而,问题仍然是纱线是否已准备好投入生产。 GitHub 存储库中仍然存在大量明显的错误,所以我会等待一个月左右。