有没有一种方法可以通过缓存来加快 npm ci 的速度?

26 浏览
0 Comments

有没有一种方法可以通过缓存来加快 npm ci 的速度?

目前,在使用 CI 时,npm ci 是安装 Node 模块最常用的方式。

但老实说,它真的很慢。

有没有一种方法可以通过缓存或不完全删除现有包(整个 node_modules 文件夹)来加快 npm ci 的速度?

0
0 Comments

NPM是一个流行的JavaScript软件包管理器,用于安装和管理项目中的依赖项。在持续集成(CI)环境中,使用npm ci命令可以快速安装依赖项并生成可重现的构建。

然而,使用npm ci命令可能会导致构建时间较长的问题。这是因为npm ci在开始之前会删除所有本地包,这是其设计的一部分。此外,NPM缓存默认情况下无法在大多数CI中进行缓存,这也会影响构建时间。

有几种方法可以加快npm ci的速度。首先,可以在本地机器上使用--prefer-offline选项,这会告诉NPM忽略缓存最小时间,并立即使用本地缓存的包,而不是通过注册表验证它们。然而,这种设置可能不会影响CI构建时间,因为大多数CI只缓存存储库作为可用的工作区,而不包括像主目录或系统目录(如apt)这样的目录。

在较旧的NPM版本中,使用--progress=false选项可以显著减少构建时间,通过去除进度条。然而,这个问题似乎已经解决了,我无法再测量到明显的差异。

另一个加快速度的最佳实践是将依赖项分成生产和开发两部分。通过传递--only=production选项,NPM将忽略开发依赖项。由于上述原因,这不会影响缓存。

最新的更新中,现在可以更改NPM缓存目录的位置。通过将其作为命令的参数(--cache .npm)或环境变量(npm_config_cache=.npm)传递,可以将NPM的缓存目录更改为临时目录的路径。然后,将其添加到CI缓存堆栈中,但在部署构建中排除它。然后,您将能够在CI脚本中使用--prefer-offline参数。

加快npm ci速度的方法包括拆分依赖项、设置本地缓存目录以及使用命令npm ci --cache --prefer-offline --only=production --silent。这将加快构建过程,但由于命令的设计,它可能不会像npm install那样快。

在GitLab CI中,可以使用缓存技术来缓存npm ci的结果,具体方法可以参考GitLab的官方文档。

总之,通过采取上述措施,可以提高npm ci的速度,从而在CI环境中更快地安装依赖项并生成构建。

0
0 Comments

NPM cache 是位于 `~/.npm` 目录下的,但在大多数 CI(持续集成)中,你只能缓存工作目录内的内容。

为了绕过这个问题,你可以将缓存目录更改为当前目录,使用命令 `npm set cache .npm`。这样,NPM cache 将被定位在 `./.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` 也可以达到同样的效果。

NPM Cache 目录可以设置为环境变量吗?

0
0 Comments

问题出现的原因:npm ci 在执行时可能会遇到网络连接慢或依赖包数量庞大的情况,导致执行速度较慢。

解决方法:使用缓存和一些选项来加快 npm ci 的执行速度。

1. 告诉 CI 缓存 npm 的缓存目录。

2. 使用 --prefer-offline--no-audit 选项来加快执行速度。

示例代码:

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

0