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

问题描述 投票:26回答:2

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

例如,Travis blog itself建议:

cache:
  directories:
    - node_modules

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

cache:
  directories:
    - $HOME/.npm

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

node.js npm travis-ci yarnpkg
2个回答
24
投票

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


6
投票

跟进@ John的回答。

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

要做到这一点,npm ci需要先从以前的构建中删除依赖图和node_modules中的所有缓存编译模块,以重构依赖图。它是通过在开始自己的安装之前完全删除node_modules来实现的。但这也意味着node_modules不能再用作特拉维斯的缓存位置。我们现在必须使用"$HOME/.npm"进行缓存,@ John已经使用“$ HOME / .npm”解释了原因。如果你继续使用"/node_modules/.bin/npm cannot be found"作为缓存位置,特拉维斯会向你抱怨node_modules,因为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"

2. "node_modules"

如果你想坚持旧的npm install

# Specify `npm install`
install:
- npm install

# Continue to use the old cache location
cache:
  directories:
  - "node_modules"

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

你可以在npm ci找到更多关于official doc的内容

© www.soinside.com 2019 - 2024. All rights reserved.