我应该提交yarn的`.pnp.js`文件吗?

29
Yarn包含一个可选的“Plug'n'Play”功能,它将node_modules移出项目目录。这样做会创建一个.pnp.js文件,并引用硬盘上各种依赖路径。
该文件是自动生成的,有几千行长,并似乎引用了在运行yarn install的机器上特定的路径.pnp.js文件是否应该与其他代码一起提交?尽管该文件似乎无用,但我似乎找不到任何关于此的信息。什么是最佳实践以及为什么?
2个回答

46

我在一个讨论如何命名.gitignore文件的问题中,发现了Yarn的主要维护者Arcanis在这条评论中提到的内容。以下是他的建议:

  • .yarn/plugins.yarn/releases 包含当前存储库中使用的 Yarn 发布版本 (由 yarn set version 定义)。您需要将它们作为版本控制项来保留 (这可以防止出现潜在问题,比如两个工程师使用不同的 Yarn 版本或具有不同功能的版本)。

  • .yarn/unplugged 应该始终被忽略,因为它可能包含原生构建。

  • .yarn/build-state.yml 也应该被忽略,因为它包含构建信息。

    • 如果您以某种方式对 unplugged 进行版本控制,则也可能需要保留 build-state
  • .yarn/cache 可以被忽略,但您需要运行 yarn install 来重新生成它。

    • 对其进行版本控制可以解锁我们称之为Zero-Installs的功能 - 这是可选的
  • .pnp.js (以及可能的 .pnp.data.json) 和缓存一样。如果您将缓存保留在存储库中,请将它添加到存储库中,否则请忽略它。

  • yarn.lock 应始终存储在存储库中 (即使您正在开发一个库)

所以总结一下:

如果您正在使用 Zero-Installs:

.yarn/unplugged
.yarn/build-state.yml

如果您没有使用零安装:

.yarn/*
!.yarn/releases
!.yarn/plugins
.pnp.*

1
什么是零安装? - user1354934
1
零安装是Yarn 2/Berry的一个功能,允许您克隆和运行。 - Thom
5
以下是官方的.gitignore建议清单链接:https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored - Daniel

6

正如一位评论者所指出的那样,官方的.gitignore推荐在这里,并附有优秀的解释。我唯一的批评是在他们展示它的方式上,我认为他们应该将常见的方法合并成一个,然后再根据是否需要零安装来区分特殊情况。下面是我的做法。但要注意那篇文章,因为其中一些内容(例如.yarn/sdk)是可选的。

# ------- yarn -------
# see excellent notes at: https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
# Also: `yarn.lock` and `.yarnrc.yml` (or it's older counterpart .yarnrc) "should always be stored in your repo"
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

## --> ADD if using zero-install, otherwise do NOT:
#!.yarn/cache

## --> ELSE ADD if NOT using yarn's zero-install:
.pnp.*

# ------- end yarn -------

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接