在VSTS中缓存npm install任务

时间:2018-10-01 09:37:17

标签: npm build azure-devops

我已经在VSTS中配置了一个私有代理,并在那里全局安装了NPM。当我尝试通过构建任务安装NPM时,它仍在为每个构建安装NPM软件包,这需要花费大量时间-大约12分钟。

如何缓存NPM安装,以减少构建时间?

3 个答案:

答案 0 :(得分:1)

我们使用npm-cache,npm-cache是​​一个节点模块,它将为每个哈希计算出package.json文件的哈希值,它将在构建服务器上使用node_modules的内容创建zip文件夹,现在为npm install简化为在每个版本上提取一个zip(当然,只有在您实际上没有更改package.json的情况下)。

这个想法是:第一次,该工具下载npm软件包并将其保存在本地;第二次,如果package.json未被更改,他将从本地磁盘上获取软件包并将其复制到构建代理文件夹,只有package.json更改后,他才从互联网上下载软件包。

  1. 在构建计算机上安装npm-cache:

    npm install npm-cache -g

  2. 在构建定义中添加命令行任务(工具:C:\Windows\User\AppData\Roaming\npm\npm-cache(如果将工具添加到环境路径变量,则为npm-cache);参数:install npm;工作文件夹:$(Build.SourcesDirectory)(或package.json所在的位置)。

答案 1 :(得分:0)

不幸的是,我们目前无法缓存NPM安装,因为目前尚无此类内置功能。

然而,已经有用户提出了建议该功能的声音:Improve hosted build agent performance with build caches,而且VSTS团队现在正在积极地进行这项工作...

目前,您可以尝试speed Up NPM INSTALL on Visual Studio Team Services

答案 2 :(得分:0)

MS终于实现了此功能(当前处于测试版)https://docs.microsoft.com/en-us/azure/devops/pipelines/caching/index?view=azure-devops#npm

从那里:

variables:
  npm_config_cache: $(Pipeline.Workspace)/.npm

steps:
- task: CacheBeta@0
  inputs:
    key: $(Build.SourcesDirectory)/package-lock.json
    path: $(npm_config_cache)
  displayName: Cache npm

- script: npm ci