我是纱线的新手,在阅读this article时有些东西引起了我的注意:
确定性: 无论安装顺序如何,相同的依赖关系将以相同的方式安装在每台机器上。通过使用锁定文件和确定性且可靠的安装算法,Yarn解决了“在我的机器上工作”的版本控制和非确定性问题
题:
我不明白:当我写npm install
时,它会查看package.json
并安装确切的版本,每个版本也根据自己的package.json
安装其依赖项,依此类推
那么有什么不同(关于这个方面)
将会非常感谢“在没有纱线的情况下npm可能出错的情况”的情景示例
package.json文件通常包含依赖项所需的最低版本。例如,您可以使用“^ 1.0.0”,它与版本1.0.0或任何次要版本匹配。
{
"name": "my_package",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0"
}
}
当你运行npm install时,它可以安装“my_dep”的版本1.0.0,1.1.0,1.2.0等,因为所有这些版本都满足package.json的要求。您最终可以在本地计算机上使用1.0.0版本,在测试环境中使用1.1.0。
Yarn自动创建yarn.lock文件,以确保始终安装相同版本的“my_dep”。它生成这样的东西:
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
my_dep@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/my_dep/-/my_dep-1.1.0.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
Yarn将使用此文件将“my_dep”解析为1.1.0版,即使有新版本(1.2.0)可用。
应将所有yarn.lock文件检入源代码控制(例如git或mercurial)。这允许Yarn在所有机器上安装相同的依赖树,无论是您的同事的笔记本电脑还是CI服务器。
参考文献:
https://docs.npmjs.com/getting-started/using-a-package.json