在 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
目录的任何跟踪。
我们的问题是,我们是否缺少任何可以:
- 允许我们在 git
中跟踪 node_modules/
- 只要我们
yarn install
就不会崩溃
我知道实际的答案是修复我们的 CI,但这现在有点超出我们的范围。
如果删除用户 运行 yarn install
的文件写入权限,也许可以防止删除 "placeholder" 文件。但是如果无法清除目录,yarn install
可能会失败。
创建一个 post install
脚本来重新创建 node_modules
中的 .empty
文件。
更具体地说,您可以在安装后调用 运行 的 package.json
中添加某些脚本。在这种情况下:
{
// ...
"scripts": {
// ...
"postinstall": "touch node_modules/.empty"
}
// ...
}
安装完成后,应确保 node_modules
中有一个名为 .empty
的文件。
我们的 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
目录的任何跟踪。
我们的问题是,我们是否缺少任何可以:
- 允许我们在 git 中跟踪
- 只要我们
yarn install
就不会崩溃
node_modules/
我知道实际的答案是修复我们的 CI,但这现在有点超出我们的范围。
如果删除用户 运行 yarn install
的文件写入权限,也许可以防止删除 "placeholder" 文件。但是如果无法清除目录,yarn install
可能会失败。
创建一个 post install
脚本来重新创建 node_modules
中的 .empty
文件。
更具体地说,您可以在安装后调用 运行 的 package.json
中添加某些脚本。在这种情况下:
{
// ...
"scripts": {
// ...
"postinstall": "touch node_modules/.empty"
}
// ...
}
安装完成后,应确保 node_modules
中有一个名为 .empty
的文件。