我们构建一个Web应用程序,我们的项目使用各种npm包进行开发,测试和运行。
该项目是TFS中大型项目的一部分。 TFS运行ant来构建项目。我们的build.xml首先运行npm install
,然后转换并缩小TypeScript和Sass文件(使用Grunt任务),然后构建最终的战争。
一切正常,但我们的TFS在构建期间不允许访问Internet,只允许我们的本地网络访问Internet。因此,我们将所有使用的npm库复制到网络中的文件服务器,而package.json依赖项指向该文件服务器上的路径。
这似乎是一个合理的解决方案吗?
我们遇到的问题是,npm安装大约需要10分钟才能获得我们使用的所有> 50个包(包括karma,grunt,sass,tslint等等 - 总计170MB)。
我们正在寻找减少TFS构建时间的方法。一个选项是我们的源代码控制中的node_modules并跳过npm install
步骤,但在我们的源代码管理中放置第三方代码似乎是错误的。
我很乐意听到其他想法来处理这个问题并缩短构建时间。
请注意,在开发人员计算机上,项目很快就会构建,因为所有软件包都已安装,但TFS构建首先从源代码控制中获取一个干净的环境,因此不会安装任何软件。
答案 0 :(得分:0)
难题。你可以让TFS检查你的package.json校验和是否已经改变,以确定是否"清理"有必要的。每当更新package.json时,你仍然有10分钟的构建时间,但是package.json的更改通常很少发生。
当您托管自己的npm库时,这些行会变得模糊,因为这实际上只是拍摄了您需要的依赖项的快照。因此,如果您添加了依赖项 colors ,则必须更新您的npm repo。这可以被视为更新npm repo上的node_modules文件夹。它是可用依赖项的静态列表,它基本上违背了package.json的目的(当然除非其他内部应用程序使用内部的npm repo)。
但我离题了,我认为最好的选择是让TFS的package.json校验和知道它是否应该打扰重建node_modules。