关于 yarn.lock 在实际项目中的一些作用

在实际项目中我们如果想正确使用 yarn.lock, 有必要了解什么是锁定文件以及它是如何工作的。尽管根据您使用的是 npm 还是 yarn 可以有不同的名称,但前提几乎相同。笔者从事 SAP Spartacus 开发中使用的是 yarn,所以我将在本文中使用 yarn.lock 作为示例。

当您在项目中运行 yarn 时,可能会发生两件事:

  • 根据 package.json 的内容生成一个锁文件(yarn.lock)(如果没有的话)
  • 根据现有 yarn.lock 的内容安装包
    重要提示:当您在应用程序或库中安装依赖项时,只考虑顶级 yarn.lock 文件。依赖项中的锁定文件将被忽略。

简而言之:

当存在于项目中时,yarn.lock 是有关项目中依赖项当前版本的主要信息来源。 Yarn 使用该信息来检查它是否需要更新任何东西——它将当前安装在项目中的依赖版本(列在 yarn.lock 中)与 package.json 中的版本限制进行比较,并在需要时更新包。其他用户可以进一步使用来自锁定文件的信息在别处创建可重复的环境。

每当您在全新安装时运行 yarn(相当于运行 yarn install)时,都会生成一个 yarn.lock 文件。 它列出了在安装过程中使用的依赖项的版本。 这意味着它会查看您的 package.json 并根据版本控制语法,它将安装您的项目依赖项,然后是它们的依赖项,然后是它们的依赖项,等等。

假设您的项目使用两个依赖项:chicken 和 farm. 这两个都是外部包,我们无法控制:

package.json:

// package.json (your project)

 dependencies: {
    
    
   "chicken": "^1.2.0",
   "farm": "2.3.0"
 }

并且 farm 包本身使用特定版本的 chicken,见下面 farm 包的 package.json:

// package.json (`farm` package)

 dependencies: {
    
    
   "chicken": "1.0.0",
   (...) 
 }

这将导致我们的项目需要两个版本的 chicken:

  • farm 包所依赖的 1.0.0
  • ^1.2.0 在项目的 package.json 中定义。 这将在全新安装时有所不同,具体取决于 1.2.0 之后的最新版本 - ^ 符号允许更改不修改版本号中最左侧的非零元素。

对于这个特定的版本范围,它意味着:

1.2.0 <= 安装版本 < 2.0.0。 举个例子 - 如果 v1.2.4 在您的项目(新)安装时可用,它将被安装。 v1.5.8、v1.7.2、v1.9.9 相同,但 v2.0.0 不一样。

安装后,会导致如下的项目层级结构:

猜你喜欢

转载自blog.csdn.net/i042416/article/details/126956366