Node.js 履带纱&x27;s node_modules目录在git中是否正确

Node.js 履带纱&x27;s node_modules目录在git中是否正确,node.js,git,yarnpkg,Node.js,Git,Yarnpkg,我们的CI中有一个奇怪的依赖项,它要求我们的git repo有一个node\u modules目录(但显然不是其中的包) 由于git不跟踪空目录,因此我们实现它的方法是在内部有一个.gitignore: node_modules/ .gitignore 使用以下配置 * !.gitignore 这是可行的,直到我们使用warn install重新安装模块,这将清除目录中的所有内容,包括我们的.gitignore文件,从而破坏存储库 我们还可以添加如下内容: node_modules/

我们的CI中有一个奇怪的依赖项,它要求我们的git repo有一个
node\u modules
目录(但显然不是其中的包)

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

node_modules/
    .gitignore
使用以下配置

*
!.gitignore
这是可行的,直到我们使用
warn install
重新安装模块,这将清除目录中的所有内容,包括我们的
.gitignore
文件,从而破坏存储库

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

node_modules/
    .empty
.gitignore
使用
.gitignore

/node\u模块/*
!/节点\ u模块/.empty
但是
warn install
仍将删除该文件以及对
node\u模块
目录的任何跟踪

我们的问题是,我们是否遗漏了能够:

  • 允许我们在git中跟踪
    节点\u模块/
  • 无论何时我们
    纱线安装

  • 我知道实际的解决办法是修复我们的CI,但这目前对我们来说有点超出范围。

    如果您从运行
    纱线安装的用户的文件中删除写入权限,您可能可以阻止删除“占位符”文件。但如果无法清除目录,则可能
    warn install
    会失败。

    创建一个
    post install
    脚本,在
    节点模块中重新创建
    .empty
    文件

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

    {
      // ...
      "scripts": {
        // ...
        "postinstall": "touch node_modules/.empty"
      }
      // ...
    }
    
    安装完成后,应确保
    节点\u模块
    中有一个名为
    .empty的文件