我应该有Travis缓存node_modules还是$ HOME / .npm

时间:2017-03-01 01:59:03

标签: node.js npm travis-ci yarnpkg

我对哪个目录最适合缓存感到困惑。我已经看过使用和推荐,但没有实际比较为什么采用这种方式或其他方式。

例如,特拉维斯blog itself建议:

cache:
  directories:
    - node_modules

但是,thousands of places使用此代码:

cache:
  directories:
    - $HOME/.npm

那么为什么要使用另一个,为什么不包括两者?

3 个答案:

答案 0 :(得分:24)

我注意到缓存node_modules文件夹导致问题(构建失败),同时缓存.npm缓存避免了它。我相信它是因为.npm缓存在node_modules文件夹存储时不存储已编译的本机模块。因此,当您测试node的不同版本时,如Travis-CI中常见的那样,它将尝试加载在node 6和barf中为node 4编译的本机模块。

答案 1 :(得分:5)

关注@John的答案。

为了严格遵守对package-lock.json的软件包依赖性,Travis CI上的npm安装过程现在默认为新的npm ci(我认为ci代表持续集成),而不是{{1 }}。这有助于防止安装未遵循正确语义版本控制的软件包。

要执行此操作,npm install首先需要摆脱依赖关系图以及先前构建中npm ci中所有缓存的编译模块,以便重新构造依赖关系图。为此,它会在开始自己安装之前完全删除node_modules。但这也意味着node_modules不能再用作Travis上的缓存位置。现在,我们必须使用node_modules进行缓存,并且@John已使用“ $ HOME / .npm”解释了原因。如果继续使用"$HOME/.npm"作为缓存位置,由于运行"/node_modules/.bin/npm cannot be found"node_modules已被删除,Travis将向您抱怨node_modules

现在有关使用哪个缓存位置...

1。 “ $ HOME / .npm”

要使用当前默认的npm ci,请将这些更改包括在npm ci

.travis.yml

2。 “ node_modules”

如果您希望坚持使用旧的# [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 install

警告:严格按照安装方法使用缓存位置,并且不能与其他位置交织在一起。否则,您将失去缓存的好处,或者更糟的是Travis构建失败。我希望这能回答您的问题。

您可以在official doc上找到有关# Specify `npm install` install: - npm install # Continue to use the old cache location cache: directories: - "node_modules" 的更多信息

答案 2 :(得分:0)

  

截至2019年7月,npm默认在Travis CI上缓存

要了解更多信息,请参见NPM Caching