【发布时间】:2019-10-10 06:36:46
【问题描述】:
问题
- 我们在 TeamCity 中有大量构建配置来处理许多相同包的 npm 安装
- 因为我们需要对我们的许多构建(例如所有 PR)强制执行干净签出,所以永远不会重复使用给定构建中的
node_modules文件夹 - 我们构建的 npm install 部分需要 4 分钟,这大约是给定构建时间的 40%。
- 每天在 10 个代理上进行数百次构建,这是一个值得减少的数字。
问题
根据我们的堆栈,在构建之间集中/重用 node_modules 文件夹的推荐方法是什么?
技术栈
- Windows Server 2008 R2
- 节点 LTS 4.x
- TeamCity 9.x
我们的尝试
-
使用
npm cache-- 默认情况下会发生这种情况,因此至少我们不会每次都从 Internet 下载包。 -
将
node_modules符号链接到一个公共目录 -- 这种方法有效(从几分钟到几秒钟),但不幸的是,在 Windows 上处理符号链接时,一些 gulp/grunt 任务会失败。呜呜呜。
我们正在尝试的其他方法
-
在层次结构的上方创建一个
node_modules文件夹:不确定,但似乎节点可以分层搜索node_modules文件夹。在这种情况下,在父目录中创建node_modules文件夹可能会解决此问题。 -
使用
NODE_PATH环境变量 -- 不确定设置它是否会执行与上述类似的操作,并在我们的某个构建中找不到时提供一个通用的node_modules文件夹。 -
使用 Powershell 在备份目录之间来回切换
Move-Item:如果我们必须破解它,可能值得为每个项目 ID 使用备份目录并使用Move-Item,这应该会更新至少分区链接而不是复制文件。 That approach is outlined on this blog post。
【问题讨论】:
-
@seanKillen 你有没有找到一个好的解决方案? - 我们的 jenkins 构建也有同样的问题
-
@pogorman 还没有——我们现在最好的方法是尝试
Move-Item。既然我们正在处理 webpack 而不是 gulp,我想更多地尝试符号链接;不过,我无权访问我之前正在试验的服务器。希望尽快尝试。