Стратегии кэширования
Verdaccio кэширует все пакеты по умолчанию в папку /storage
. Но если вы хотите, вы можете перейти на другие стратегии. С помощью плагинов вы можете использовать облако или любую базу данных.
Сценарии кэширования
- Сборка проекта на Node.js project на серверах непрерывной интеграции (Bamboo, GitLab, Jenkins, и т.д.) - это задача, которая может выполняться несколько раз в день, при этом сервер каждый раз будет загружать кучи tar-файлов. Ведь обычно CI-инструменты очищают кэш после каждой сборки, и процесс загрузки каждый раз начинается заново. Это напрасная нагрузка на сеть и напрасная трата трафика. Вы можете использовать Verdaccio для кэширования tar-файлов и метаданных в своей внутренней сети и этим ускорить сборку.
- Задержка и Доступность, не во всех странах есть высокоскоростное соединение. По этой причине, иметь кэшированные в вашей сети пакеты - очень удобно. Или вы путешествуете, или у вас слабое соединение, или роуминг, или вы находитесь в стране с сильным фаерволом, который может повлиять на пользовательский опыт (в смысле: повредить tar-файлы).
- Офлайновый режим, все менеджеры пакетов в наши дни имеют свой внутренний кэш, но обычно у каждого проекта свой инструментарий, своя система блокировки файлов и т.д. Это делает невозможным использование общего кэша, и требуется централизованное решение, например, проксирующий репозиторий Verdaccio, который кэширует метаданные и tar-файлы, загруженные по требованию пользователя, и позволяет совместно их использовать.
- Позволяет избегнуть ситуации, когда удаленный репозиторий пакетов возвращает ошибку HTTP 404 для tar-файлов, которые были доступны совсем недавно (a.k.a случай с left-pad).
Стратегии для ускорения сборки
Мы ищем новые стратегии, не стесняйтесь делиться опытом на этом поле.
Отключение кэширования tar-файлов
Если у вас не так много места, вам может понадобится отключение кэширования tar-файлов, установите cache
в значение false для каждого аплинка, и только метаданные будут кэшироваться.
uplinks:
npmjs:
url: https://registry.npmjs.org/
cache: false
Увеличение времени жизни метаданных
По умолчанию, время жизни метаданных в кэше Verdaccio составляет 2 минуты, после чего метаданные будут снова запрошены из удаленного репозитория.
uplinks:
npmjs:
url: https://registry.npmjs.org/
maxage: 30m
Если увеличить значение maxage
для каждого аплинка
, удаленный репозиторий будет опрашиваться реже. Это может стать отличной стратегией, если ваши зависимости обновляются не слишком часто.
Использование памяти вместо диска
Иногда закэшировать пакеты не так важно, а важно получить их из разных репозиториев и ускорить сборку. Есть два плагина, которые позволяют избежать записи пакетов на диск, и хранить их в памяти.
npm install -g verdaccio-auth-memory
npm install -g verdaccio-memory
Конфиграция выглядит примерно так
auth:
auth-memory:
users:
foo:
name: test
password: test
store:
memory:
limit: 1000
Помните, что когда сервер будет перезапущен, все данные будут потеряны, поэтому мы рекомендуем этот вариант в случаях, когда вам вообще не нужно хранить пакеты.