[英]Nodejs npm step downloads packages on every build in TeamCity
当谈到 nodejs npm 时,我有点不以为然,但是由于使用几篇文章中推荐的步骤在我们的构建环境中实现它,它使我们的构建时间增加了三倍。
我们将它用于标准的东西(minify/concat/etc js/css/etc)
我们使用 TeamCity 并添加了一个 Node.js NPM 步骤,然后添加了一个 gulp 步骤来运行任务(RE: https : //github.com/jonnyzzz/TeamCity.Node )
设置 NPM 的任务花费最多的时间,2 分 10 秒,占总构建时间的 65% 以上,调用命令“npm install”,这似乎在每次构建时重新下载所有包
步骤 3/7:NPM 设置(Node.js NPM)(2m:10s)
[npm install] 开始:cmd /c npm install
之前的总构建时间约为 1 分 30 秒,包括单元测试。
反正有没有在本地缓存这些并防止在每次构建时重新下载? 在用户配置文件中或与构建文件夹相反的其他内容中?
更多详情..
这可能最好地解释了设置http://www.dotnetcurry.com/visualstudio/1096/using-grunt-gulp-bower-visual-studio-2013-2015
我们有使用新 Task Runner Explorer 的 C# 项目,依赖项由此保存到 package.json 中,您在工作区的本地环境中预先运行“npm install”一次(需要使用 .tfignore 来防止它从签入到源)然后不再,除非您启动一个新的本地工作区。
当构建运行时,它需要从命令行运行“npm install”,它从 package.json 文件中获取依赖项并将它们安装到构建工作目录内的子文件夹中,即使这些文件已经存在从以前的版本那里(即 TC 代理尚未清理它们),您无法将它们安装在工作文件夹之外。
我可能是错的......或者我应该说我希望我错了,并正在寻找一种让 gulp 支持这一点的方法,但是无论我们以何种方式使其工作都需要使用任务运行器资源管理器,因此 F5 体验开发人员在他们的本地仍然相同。
我们确实有多个代理是的。
我不了解 Node.js,但这里有一些 TeamCity 特定的建议:
%TEMP%
? 如果是这样,它们将无法在后续 TeamCity 构建之间重用,因为 TeamCity 代理会劫持%TEMP%
目录(将其重定向到<TeamCity Home>/buildAgent/temp/buildTmp
)并始终在每次新构建之前完全擦除此目录。 (请参阅此处的buildTmp
。)
%TEMP%
和其他地方),从而为 TeamCity 留出一些余地。我发现解决这个问题的最好方法是备份/恢复节点模块文件夹,我在这里写了一篇关于它的博客文章
https://beerandserversdontmix.com/2016/06/04/teamcity-and-avoiding-redownloading-of-npm-packages/
如果您没有使用“松散”的软件包版本,这可能是您的问题。 您可以指定类似npm install angular-cli@0.1.0.0-beta.10
,但是您一直停留在旧版本上,如果您的开发人员经常更改他们针对您构建的内容,那么您的构建就会流失系统。
在你的packages.json 中,你可以使用* 和~ 来定义通配符版本,比如3.* 或~2.5,这会让你得到3.x 的任何“次要”版本,比如3.0.2 或3.0.99,而2.5 会类似的东西,可以安装任何版本的 2.5.x,但不能安装 2.6.0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.