Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该使用Travis缓存节点_模块还是$HOME/.npm_Node.js_Npm_Travis Ci_Yarnpkg - Fatal编程技术网

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
的更多信息。