对于nodejs npm,我有点像n00b,但是由于在我们的构建环境中使用几篇文章推荐的步骤实现它,它的构建时间增加了三倍。
我们将它用于标准内容(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代理没有清理它们),但是你不能将它们安装在工作文件夹之外。
我可能是错的......或者我应该说我希望我错了,并且寻找一种方法来支持这一点,但是我们使其工作的任何方式都需要与任务运行者资源管理器一起工作所以对于开发者而言,F5的体验在当地仍然是相同的。
我们确实有多个代理商。
答案 0 :(得分:10)
我不了解Node.js,但这里有一些特定于TeamCity的建议:
%TEMP%
?如果是这样,它们将无法在后续TeamCity构建之间重复使用,因为TeamCity代理程序劫持%TEMP%
目录(将其重定向到<TeamCity Home>/buildAgent/temp/buildTmp
)并始终在每次新构建之前完全擦除此目录。 (见buildTmp
here。)
%TEMP%
和其他地方),从而为TeamCity提供一些余地。答案 1 :(得分:6)
我发现修复此问题的最佳方法是备份/恢复节点模块文件夹,我在这里做了一篇关于它的博客文章
https://beerandserversdontmix.com/2016/06/04/teamcity-and-avoiding-redownloading-of-npm-packages/
答案 2 :(得分:0)
如果您不使用“松散”软件包版本,这可能是您的问题。您可以指定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。
答案 3 :(得分:0)