Должен ли я иметь кэш 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
на официальном документе