有一点 npm ci应该是CI中的首选项,因为它与package-lock.json文件有关。与npm install不同,npm install重写文件并始终安装新版本。 By design这个命令总是清除所有的本地包,在开始的时候删除node_modules目录。这是长构建的主要原因。并且没有选项来避免这种恼人的行为。 在本地机器上,您可以通过添加选项--prefer-offline来提高npm ci的速度,该选项告诉NPM忽略该高速缓存最小时间,并立即使用本地缓存的包,而不是根据注册表验证它们。 但是,NPM缓存位于Unix上的~/.npm,或Windows上的%AppData%/npm-cache。默认情况下,这些文件夹在大多数配置项中是不可缓存的。例如,GitLab配置项缓存仅将存储库作为可用工作区。其他目录如主目录或系统目录(如apt)不会被缓存。因此,此设置可能不会影响您的配置项构建时间。 在旧版本的NPM中,选项--progress=false通过删除进度条对构建时间有很大的影响。这个问题似乎已经消失了,但是我不能再测量值得注意的差异了。 一个最好的实践和绝对的速度增益是separate packages into production and development。通过传递选项--only=production,NPM将忽略开发依赖项。由于上述原因,这不会影响缓存。
4条答案
按热度按时间58wvjzkj1#
NPM缓存位于
~/.npm
中,但在大多数配置项中,您只能缓存工作目录中的内容。您可以通过
npm set cache .npm
该高速缓存目录更改为当前目录来避免此问题。NPM缓存现在将位于./.npm
中,您可以在CI作业之间缓存此文件夹。GitLab CI示例:
编辑:刚刚发现您可以将config设置为命令行标志,因此
npm ci --cache .npm
也应该这样做r6vfmomb2#
有一点
npm ci
应该是CI中的首选项,因为它与package-lock.json
文件有关。与npm install
不同,npm install
重写文件并始终安装新版本。By design这个命令总是清除所有的本地包,在开始的时候删除
node_modules
目录。这是长构建的主要原因。并且没有选项来避免这种恼人的行为。在本地机器上,您可以通过添加选项
--prefer-offline
来提高npm ci
的速度,该选项告诉NPM忽略该高速缓存最小时间,并立即使用本地缓存的包,而不是根据注册表验证它们。但是,NPM缓存位于Unix上的
~/.npm
,或Windows上的%AppData%/npm-cache
。默认情况下,这些文件夹在大多数配置项中是不可缓存的。例如,GitLab配置项缓存仅将存储库作为可用工作区。其他目录如主目录或系统目录(如apt
)不会被缓存。因此,此设置可能不会影响您的配置项构建时间。在旧版本的NPM中,选项
--progress=false
通过删除进度条对构建时间有很大的影响。这个问题似乎已经消失了,但是我不能再测量值得注意的差异了。一个最好的实践和绝对的速度增益是separate packages into production and development。通过传递选项
--only=production
,NPM将忽略开发依赖项。由于上述原因,这不会影响缓存。正如下面的注解所指出的,现在可以改变NPM的缓存目录的位置。(
--cache .npm
)或环境变量(npm_config_cache=.npm
)。因此,将其更改为存储库中临时目录的路径,请将其添加到CI缓存堆栈中,但从部署构建中排除。然后,您还可以在CI脚本中使用--prefer-offline
参数。总结:
npm ci --cache <local cache directory> --prefer-offline --only=production --silent
npm install
4nkexdtk3#
您可以告诉您的配置项缓存npm的缓存目录,然后使用选项
--prefer-offline
和--no-audit
,例如:npm ci --prefer-offline --no-audit
z31licg04#
这对我很有帮助,尽管它可能只在本地有用https://stackoverflow.com/a/61364681/9727824
基本上使用
npm ci --production
,这将跳过安装设备依赖项。编辑:NPM的后续版本建议使用
npm ci --omit=dev
,如此处所述。