目前,npm ci是在使用CI时安装节点模块的最常见方法。但老实说,它真的很慢。是否有一种使用缓存加速npm ci或不完全删除现有包(整个node_modules文件夹)的方法?
发布于 2020-02-22 17:51:24
NPM缓存位于~/.npm中,但在大多数CIs中,您只能在工作目录中缓存内容。
要避免这种情况,您可以使用npm set cache .npm将缓存目录更改为当前目录。NPM缓存现在将位于./.npm中,您可以在CI作业之间缓存此文件夹。
GitLab CI示例:
my-super-job:
image: node:13-alpine
script:
- npm set cache .npm
- npm ci
cache:
paths:
- .npm编辑:刚刚发现你可以将配置设置为命令行标志,所以npm ci --cache .npm应该做同样的事情
发布于 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 --silentnpm install那样快发布于 2019-08-26 20:58:03
您可以告诉您的CI缓存npm的缓存dir,然后使用选项--prefer-offline和--no-audit,例如:
npm ci --prefer-offline --no-audit
https://stackoverflow.com/questions/55230628
复制相似问题