在VSTS中缓存npm install任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VSTS中缓存npm install任务相关的知识,希望对你有一定的参考价值。

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

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

答案

我们使用npm-cache,npm-cache是​​一个节点模块,它将计算你的package.json文件的哈希值,它将在你的构建服务器上创建zip文件夹,其内容为node_modules,现在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所在的位置)。
另一答案

遗憾的是,我们无法将NPM安装缓存为现在没有这样的内置功能。

然而,已经提交了一个用户声音来建议该功能:Improve hosted build agent performance with build caches,似乎VSTS团队现在正积极致力于此...

现在,你可以尝试speed Up NPM INSTALL on Visual Studio Team Services

另一答案

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

以上是关于在VSTS中缓存npm install任务的主要内容,如果未能解决你的问题,请参考以下文章

仅当子目录中的文件已更改时,才运行VSTS构建任务以运行“npm build”

未为任务启用 Gradle 构建缓存

npm install 后 Gitlab Shared Runner docker build

用新的用户名和密码更新 vsts-npm-auth

VSTS 软件包提要:配置客户端以使用 vsts 提要后无法安装公共 npm 软件包

Node JS - Grunt 任务中的 child_process spawn('npm install') 导致 ENOENT 错误