我应该有 Travis 缓存 node_modules 还是 $HOME/.npm
Should I have Travis cache node_modules or $HOME/.npm
我很困惑哪个目录最适合缓存。我已经看到使用过的和推荐的,但没有实际比较为什么要走这条路或那条路。
cache:
directories:
- node_modules
但是,thousands of places 改用这个:
cache:
directories:
- $HOME/.npm
那么为什么要使用一个而不是另一个,为什么不包括两者呢?
我注意到缓存 node_modules
文件夹导致了问题(构建失败),而缓存 .npm
缓存避免了它。我相信这是因为 .npm
缓存不存储编译的本机模块,而 node_modules
文件夹存储。因此,当您测试 node
的不同版本时,这在 Travis-CI 中很常见,它将尝试加载为 node
4 在 node
6 中编译的本机模块,并且呕吐。
跟进。
为了严格遵守 package-lock.json
上的包依赖性,Travis CI 上的 NPM 安装过程现在默认为新的 npm ci
(ci
代表持续集成,我认为)而不是 npm install
。这有助于防止安装未遵循正确语义版本控制的包。
为此,npm ci
需要先从以前的构建中删除依赖关系图和 node_modules
中的所有缓存编译模块,以便重构依赖关系图。它通过在开始自己的安装之前完全删除 node_modules
来实现。但这也意味着 node_modules
不能再用作 Travis 上的缓存位置。我们现在必须使用 "$HOME/.npm"
来缓存,@John 已经解释了使用 "$HOME/.npm"
的原因。如果您继续使用 node_modules
作为缓存位置,Travis 会向您报错 "/node_modules/.bin/npm cannot be found"
,因为 node_modules
在 运行 npm ci
.[= 时已被删除34=]
现在关于使用哪个缓存位置...
$HOME/.npm
如果您想使用现在的默认 npm ci
,请将这些更改包含在您的 .travis.yml
中
# [optional] `npm ci` is now default on Travis
install:
- npm ci
# Keep the npm cache around to speed up installs
cache:
directories:
- "$HOME/.npm"
node_modules
如果你想坚持旧的npm install
# Specify `npm install`
install:
- npm install
# Continue to use the old cache location
cache:
directories:
- "node_modules"
警告:您的缓存位置取决于您选择的安装方法,不能与其他方法交织在一起。否则,您可能会失去缓存的好处,或者更糟的是,Travis 构建失败。
您可以在 NPM docs 中找到有关 npm ci
的更多信息。
我很困惑哪个目录最适合缓存。我已经看到使用过的和推荐的,但没有实际比较为什么要走这条路或那条路。
cache:
directories:
- node_modules
但是,thousands of places 改用这个:
cache:
directories:
- $HOME/.npm
那么为什么要使用一个而不是另一个,为什么不包括两者呢?
我注意到缓存 node_modules
文件夹导致了问题(构建失败),而缓存 .npm
缓存避免了它。我相信这是因为 .npm
缓存不存储编译的本机模块,而 node_modules
文件夹存储。因此,当您测试 node
的不同版本时,这在 Travis-CI 中很常见,它将尝试加载为 node
4 在 node
6 中编译的本机模块,并且呕吐。
跟进
为了严格遵守 package-lock.json
上的包依赖性,Travis CI 上的 NPM 安装过程现在默认为新的 npm ci
(ci
代表持续集成,我认为)而不是 npm install
。这有助于防止安装未遵循正确语义版本控制的包。
为此,npm ci
需要先从以前的构建中删除依赖关系图和 node_modules
中的所有缓存编译模块,以便重构依赖关系图。它通过在开始自己的安装之前完全删除 node_modules
来实现。但这也意味着 node_modules
不能再用作 Travis 上的缓存位置。我们现在必须使用 "$HOME/.npm"
来缓存,@John 已经解释了使用 "$HOME/.npm"
的原因。如果您继续使用 node_modules
作为缓存位置,Travis 会向您报错 "/node_modules/.bin/npm cannot be found"
,因为 node_modules
在 运行 npm ci
.[= 时已被删除34=]
现在关于使用哪个缓存位置...
$HOME/.npm
如果您想使用现在的默认
中npm ci
,请将这些更改包含在您的.travis.yml
# [optional] `npm ci` is now default on Travis install: - npm ci # Keep the npm cache around to speed up installs cache: directories: - "$HOME/.npm"
node_modules
如果你想坚持旧的
npm install
# Specify `npm install` install: - npm install # Continue to use the old cache location cache: directories: - "node_modules"
警告:您的缓存位置取决于您选择的安装方法,不能与其他方法交织在一起。否则,您可能会失去缓存的好处,或者更糟的是,Travis 构建失败。
您可以在 NPM docs 中找到有关 npm ci
的更多信息。