Yarn vs Npm - "works on my machine" - 澄清一下?

Yarn vs Npm - "works on my machine" - clarification?

我是 yarn 的新手,在阅读 this article 时有些东西引起了我的注意,上面写着:

Deterministic:
The same dependencies will be installed the same exact way across every machine regardless of install order. Yarn resolves "works on my machine" issues around versioning and non-determinism by using lockfiles and an install algorithm that is deterministic and reliable

问题:

我不明白:当我写 npm install 时,它会查看 package.json 并安装确切的版本,每个版本还根据自己的 package.json 和等等等等

那么有什么区别(关于这方面)

在 npm 中可能出错而在 yarn 中不出错的事情”的场景示例将不胜感激

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等版本,因为这些版本都满足[=37]的要求=].您最终可能会在本地机器上使用 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)。

All yarn.lock files should be checked into source control (e.g. git or mercurial). This allows Yarn to install the same exact dependency tree across all machines, whether it be your coworker’s laptop or a CI server.

参考文献:

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