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

SCB*_*SCB 2 git node.js yarnpkg

我们的CI中有一个奇怪的依赖,它要求我们的git repo有一个node_modules目录(但显然不是它中的包).

由于git不跟踪空目录,我们实现它的方式是有一个.gitignore内部:

node_modules/
    .gitignore
Run Code Online (Sandbox Code Playgroud)

使用以下配置

*
!.gitignore
Run Code Online (Sandbox Code Playgroud)

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

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

node_modules/
    .empty
.gitignore
Run Code Online (Sandbox Code Playgroud)

.gitignore:

/node_modules/*
!/node_modules/.empty
Run Code Online (Sandbox Code Playgroud)

yarn install仍将删除该文件,以及任何跟踪node_modules目录.

我们的问题是,我们缺少哪些可以:

  1. 允许我们跟踪node_modules/git
  2. 我们不会破坏 yarn install

我知道实际的答案是修复我们的CI,但这对我们来说有点超出了我们的范围.

nil*_*arp 5

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

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

{
  // ...
  "scripts": {
    // ...
    "postinstall": "touch node_modules/.empty"
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

安装完成后,应确保在node_modules命名文件中存在文件.empty.