我有一个大型节点存储库,其中有一个
node_modules
文件夹,该文件夹未跟踪(包含在 .gitignore
文件中)。我最近开始学习 git worktrees,我希望能够添加包含 node_modules
文件夹的工作树,而不必在该工作树上运行 npm install 。有没有办法在不编辑 .gitignore
或手动复制文件夹的情况下完成此任务?我只是想在创建工作树时准备好工作树
提前致谢
搜索了相关问题,查看了git worktree的文档
不确定这是否是您的意思,但您可以暂时从
node_modules
中删除 .gitignore
,并在将内容推送到上游后将该行添加回来。
因此,我能想到的没有一种方法可以在不违反至少一个先决条件的情况下完成您所要求的任务。您必须执行以下 3 项中的一项:
npm install
。node_modules
。node_modules
中的 .gitignore
(这会遇到必须从 git 中删除之前跟踪的 node_modules
的问题)。我会推荐第一个(在你的工作树中运行
npm install
),原因正如@torek所说。您的 node_modules
中的依赖项版本可能略有不同,除非它与工作树中的 package_lock.json
1:1 匹配,否则您将陷入沮丧的世界,无论如何您最终都会运行 npm install
。
工作树的主要用例是因为我正在开发一个具有不同节点模块集的功能分支(例如角度版本升级功能分支),并且我需要签出开发或另一个功能分支以进行代码审查和我不想每次结帐到新分支时都必须运行
npm install
。
npm 工作空间 自动符号链接所有具有
node_modules
的子项目(工作空间)的 packages.json
目录。
这是一个示例项目结构
PROJECT /
node_modules
packages /
client /
package.json
server /
package.json
wt-main/
client/
server/
package.json
所有工作区包都有自己的 package.json,但会共享顶层
node_modules
。
从根运行
npm install
以解决所有工作区的依赖关系。 npm install
特定工作区的依赖关系 npm install package -w workspace
。例如,我可以通过执行 foo
来为我的 wt-main
工作空间停止 npm install foo -w packages/wt-main
。
package.json
"workspaces": [
"packages/*"
]
上述配置假设所有工作树都位于
packages/
中。工作树名称不能与分支名称相同。因此,为什么主分支工作树的名称是 wt-main
而不是仅仅 main
。
为主分支创建新的工作树
git worktree add packages/wt-main
切换到工作树
cd packages/wt-main
像平常一样启动 NPM 项目
npm run start
(或任何使用的东西)
工作区/工作树中将明显缺少
node_modules
,但该项目仍然有效!
最后,忽略任何实际上是工作树的包。这里的模式是以
wt-
开始工作树目录名称。
packages/wt-*
完成!我希望这有帮助。