在 git 中正确跟踪 yarn 的 node_modules 目录

Track yarn's node_modules directory properly in git

我们的 CI 中有一个奇怪的依赖关系,它要求我们的 git 存储库有一个 node_modules 目录(但显然不是其中的包)。

由于git不跟踪空目录,我们实现它的方法是在里面有一个.gitignore

node_modules/
    .gitignore

配置如下

*
!.gitignore

这有效,直到我们使用 yarn install 重新安装我们的模块,这将清除目录中的所有内容,包括我们的 .gitignore 文件,弄乱存储库。

我们还可以添加如下内容:

node_modules/
    .empty
.gitignore

.gitignore:

/node_modules/*
!/node_modules/.empty

但是 yarn install 仍会删除该文件,以及对 node_modules 目录的任何跟踪。

我们的问题是,我们是否缺少任何可以:

  1. 允许我们在 git
  2. 中跟踪 node_modules/
  3. 只要我们 yarn install
  4. 就不会崩溃

我知道实际的答案是修复我们的 CI,但这现在有点超出我们的范围。

如果删除用户 运行 yarn install 的文件写入权限,也许可以防止删除 "placeholder" 文件。但是如果无法清除目录,yarn install 可能会失败。

创建一个 post install 脚本来重新创建 node_modules 中的 .empty 文件。

更具体地说,您可以在安装后调用 运行 的 package.json 中添加某些脚本。在这种情况下:

{
  // ...
  "scripts": {
    // ...
    "postinstall": "touch node_modules/.empty"
  }
  // ...
}

安装完成后,应确保 node_modules 中有一个名为 .empty 的文件。