Node.js 我应该使用Travis缓存节点_模块还是$HOME/.npm
我很困惑哪个目录最适合缓存。我已经看到了使用和推荐两种方法,但是没有实际的比较来说明为什么要这样或那样做 例如,特拉维斯建议:Node.js 我应该使用Travis缓存节点_模块还是$HOME/.npm,node.js,npm,travis-ci,yarnpkg,Node.js,Npm,Travis Ci,Yarnpkg,我很困惑哪个目录最适合缓存。我已经看到了使用和推荐两种方法,但是没有实际的比较来说明为什么要这样或那样做 例如,特拉维斯建议: cache: directories: - node_modules 但是,请改用此选项: cache: directories: - $HOME/.npm 那么为什么要使用一个而不是另一个呢?为什么不同时包括这两个呢?我注意到缓存节点模块时,缓存文件夹会导致问题(生成失败)。npm缓存避免了这一问题。我认为这是因为.npm缓存不存储编译后的
cache:
directories:
- node_modules
但是,请改用此选项:
cache:
directories:
- $HOME/.npm
那么为什么要使用一个而不是另一个呢?为什么不同时包括这两个呢?我注意到缓存
节点模块时,缓存文件夹会导致问题(生成失败)。npm
缓存避免了这一问题。我认为这是因为.npm
缓存不存储编译后的本机模块,而节点\u模块
文件夹存储编译后的本机模块。因此,当您测试不同版本的node
时,就像Travis CI中常见的那样,它将尝试加载为node
6和barf中的node
4编译的本机模块。跟进@John的答案
为了严格遵守package lock.json的包依赖关系,Travis CI上的npm安装过程现在默认为新的npm CI
(CI
我认为代表持续集成),而不是npm安装
。这有助于防止安装未遵循正确语义版本控制的包
为此,npmci
需要首先从以前的版本中删除依赖关系图和node\u modules
中的所有缓存编译模块,以便重新构造依赖关系图。它通过在开始自己的安装之前完全删除node\u模块来实现。但这也意味着,node\u模块
不能再用作Travis上的缓存位置。我们现在必须使用“$HOME/.npm”
来缓存,@John已经解释了使用“$HOME/.npm”的原因。如果您继续使用节点模块
作为缓存位置,Travis将向您抛出一个错误,抱怨“/node\u modules/.bin/npm找不到”
,因为节点模块
在运行npm ci
时已被删除
现在关于要使用的缓存位置
###一,。“$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"
###二,。“节点_模块”
如果您希望继续使用旧的npm安装
# Specify `npm install`
install:
- npm install
# Continue to use the old cache location
cache:
directories:
- "node_modules"
警告:缓存位置取决于您选择的安装方法,不能与其他安装方法相互缠绕。否则,您可能会失去缓存的好处,或者更糟糕的是,Travis构建失败。我希望这回答了你的问题
您可以在上找到有关npm ci
的更多信息。