纱线零安装 - 未插入目录中缺少包但无法提交本地未插入目录

yarn zero install - missing packages from unplugged directory but can't commit local unplugged directory

切换到 yarn 零安装方法(参见 https://yarnpkg.com/features/zero-installs)我在 运行 连接我们的 CI 管道时遇到以下样式的错误:

/app/.pnp.cjs:47262
throw firstError;
      ^
 
Error: Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).
 
Missing package: nodemon@npm:2.0.7
Expected package location: /app/.yarn/unplugged/nodemon-npm-2.0.7-7b95e46511/node_modules/nodemon/
.
.
.

好的,这是预料之中的,因为这种方法没有 运行 yarn install,只是使用 .yarn 中缓存中的文件。按照本段最后一点的建议 https://yarnpkg.com/features/zero-installs#how-do-you-reach-this-zero-install-state-youre-advocating-for 我调整了我的 .gitignore.dockerignore 文件以包含以下内容:

.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
!.yarn/unplugged

因此,拔出的文件夹应该能够提交到回购协议,并且在 CI 管道期间可用。但是可以看到,unplugged文件夹下各个包的文件都是灰色的,无法提交。

git status --ignore 的输出仍然列出了 unplugged 目录,即使在检查了所有 .gitignore 个文件之后也是如此:

.yarn/.DS_Store
.yarn/build-state.yml
.yarn/cache/.gitignore
.yarn/install-state.gz
.yarn/unplugged/

我该怎么做才能将文件放入存储库或以其他方式避免开头提到的错误?

根据评论,事实证明另一个忽略规则覆盖了所需的取消忽略规则。关键诊断是使用:

git check-ignore -v .yarn/unplugged/somedir/node_modules/somefile

(或类似),它指向 **/node_modules/ 行,导致 .yarn/unplugged/ 中的 node_modules/ 中的 somefile 被跳过。

这里更一般的要点是,如果 git add . 正在跳过某些文件,您可以使用经常使用 git check-ignore -v 来找出原因。请注意,在特定的跳过 文件 上使用它很重要。 (它对子模块也不是很好,但这完全是另一个问题。)