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

bal*_*ton 28 node.js npm travis-ci yarnpkg

我很困惑哪个目录最适合缓存.我已经看过使用和推荐,但没有实际比较为什么采取这种或那种方式.

例如,Travis 博客 本身建议:

cache:
  directories:
    - node_modules
Run Code Online (Sandbox Code Playgroud)

但是,成千上万的地方使用它:

cache:
  directories:
    - $HOME/.npm
Run Code Online (Sandbox Code Playgroud)

那么为什么要使用其中一个,为什么不包括两个呢?

Joh*_*ton 27

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


Han*_*han 7

继续@John的回答。

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

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

现在,关于要使用的缓存位置...

1.“ $ 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"
Run Code Online (Sandbox Code Playgroud)

2.“ node_modules”

如果你想坚持旧的 npm install

# Specify `npm install`
install:
- npm install

# Continue to use the old cache location
cache:
  directories:
  - "node_modules"
Run Code Online (Sandbox Code Playgroud)

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

您可以npm ci官方文档中找到有关的更多信息