首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种使用缓存加速npm的方法?

有没有一种使用缓存加速npm的方法?
EN

Stack Overflow用户
提问于 2019-03-18 21:57:00
回答 5查看 39.4K关注 0票数 60

目前,npm ci是在使用CI时安装节点模块的最常见方法。但老实说,它真的很慢。是否有一种使用缓存加速npm ci或不完全删除现有包(整个node_modules文件夹)的方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-02-22 17:51:24

NPM缓存位于~/.npm中,但在大多数CIs中,您只能在工作目录中缓存内容。

要避免这种情况,您可以使用npm set cache .npm将缓存目录更改为当前目录。NPM缓存现在将位于./.npm中,您可以在CI作业之间缓存此文件夹。

GitLab CI示例:

代码语言:javascript
复制
my-super-job:
  image: node:13-alpine
  script:
    - npm set cache .npm
    - npm ci 
  cache:
    paths:
      - .npm

编辑:刚刚发现你可以将配置设置为命令行标志,所以npm ci --cache .npm应该做同样的事情

票数 45
EN

Stack Overflow用户

发布于 2019-10-01 14:38:10

tl;̶N̶o̶.̶博士,有点.

npm ci在CI中应该是首选的,因为它尊重package-lock.json文件。与npm install不同,它重写文件并总是安装新版本。

精心设计这个命令总是通过删除开头的node_modules目录来清除所有本地包。这是长期构建的主要原因。也没有办法避免这种恼人的行为。

在本地机器上,您可以通过添加选项npm ci来加速--prefer-offline,该选项告诉NPM忽略缓存的最小时间,并立即使用本地缓存的包,而不是根据注册表验证它们。

但是,NPM缓存位于Unix上的~/.npm或Windows上的%AppData%/npm-cache中。在大多数CIs中,默认情况下这些文件夹是不可缓存的。例如,GitLab CI缓存只有作为可用工作区的存储库。其他目录,如主目录或系统目录(例如。apt)没有缓存。因此,此设置可能不会影响您的CI构建时间。

在旧版本的NPM中,通过删除进度条,选项--progress=false对构建时间有显著影响。这个问题似乎已经消失了,但我不能再衡量一个值得注意的差别了。

将包分离到生产和开发是一个最佳实践,当然也是速度上的提高。通过传递选项,--only=production NPM将忽略开发依赖关系。由于上述原因,这不会影响缓存。

更新2021-06:现在可以更改缓存目录。

正如下面的注释所指出的,现在可以更改NPM缓存目录的位置。例如,将其作为参数传递给每个命令(--cache .npm)或环境变量(npm_config_cache=.npm)。因此,将其更改为存储库中的临时目录( 将其添加到CI缓存堆栈中。 )的路径,但将其排除在部署构建之外。然后,您也可以在CI脚本中使用--prefer-offline参数。

摘要:

  • 分裂依赖
  • 设置本地缓存目录
  • 使用npm ci --cache <local cache directory> --prefer-offline --only=production --silent
  • 这将加快进程,但由于命令设计的原因,它不能像npm install那样快
票数 35
EN

Stack Overflow用户

发布于 2019-08-26 20:58:03

您可以告诉您的CI缓存npm的缓存dir,然后使用选项--prefer-offline--no-audit,例如:

npm ci --prefer-offline --no-audit

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55230628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档