Yarn vs Npm - “在我的机器上工作” - 澄清?

问题描述 投票:8回答:1

我是纱线的新手,在阅读this article时有些东西引起了我的注意:

确定性: 无论安装顺序如何,相同的依赖关系将以相同的方式安装在每台机器上。通过使用锁定文件和确定性且可靠的安装算法,Yarn解决了“在我的机器上工作”的版本控制和非确定性问题

题:

我不明白:当我写npm install时,它会查看package.json并安装确切的版本,每个版本也根据自己的package.json安装其依赖项,依此类推

那么有什么不同(关于这个方面)

将会非常感谢“在没有纱线的情况下npm可能出错的情况”的情景示例

javascript node.js npm yarnpkg
1个回答
3
投票

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

https://docs.npmjs.com/getting-started/semantic-versioning

https://yarnpkg.com/en/docs/yarn-lock

© www.soinside.com 2019 - 2024. All rights reserved.