Должен ли я иметь кэш Travis node_modules или $HOME/.npm

Я довольно смущен, какой каталог оптимален для кэширования. Я видел как используемые, так и рекомендованные, но не фактическое сравнение относительно того, зачем идти так или иначе.

Например, сам Travis blog рекомендует:

cache:
  directories:
    - node_modules

Однако тысячи мест используют это вместо:

cache:
  directories:
    - $HOME/.npm

Так зачем использовать один над другим, и почему бы не включить оба?

Ответ 1

Я заметил, что кэширование папки node_modules вызвало проблемы (сборка не удалась), в то время как кэширование кеша .npm позволило избежать этого. Я верю в это, потому что в кэше .npm не хранятся скомпилированные собственные модули, а в папке node_modules. Поэтому, когда вы тестируете разные версии node, как это обычно бывает в Travis-CI, он попытается загрузить собственный модуль, скомпилированный, скажем, для node 4 в node 6 и barf.

Ответ 2

Продолжайте отвечать на вопросы @John.

Чтобы строго придерживаться зависимостей пакетов от package-lock.json, процесс установки npm в Travis CI теперь по умолчанию использует новый npm ci (я думаю, ci означает непрерывную интеграцию) вместо 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 в качестве местоположения кэша, поскольку 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"

Предупреждение: расположение кэша используется строго в соответствии с методом установки и не может быть переплетено с другим. В противном случае вы потеряли бы преимущества кэширования или, что еще хуже, имели бы неудачную сборку Трэвиса. Я надеюсь, что это ответило на ваш вопрос.

Вы можете найти больше информации о npm ci на официальном документе