Как ускорить npm install на CI/CD?
npm install у нас занимает 3-4 минуты на GitHub Actions. Проект большой, ~800 зависимостей. Кеширование node_modules уже настроено. Что ещё можно сделать?
npm install у нас занимает 3-4 минуты на GitHub Actions. Проект большой, ~800 зависимостей. Кеширование node_modules уже настроено. Что ещё можно сделать?
Переходи на pnpm — он в 2-3 раза быстрее за счёт хардлинков. Или хотя бы npm ci вместо npm install (он не обновляет lock-файл). Ещё можно: frozen-lockfile, кешировать .npm вместо node_modules, и использовать более мощный раннер.
Ещё один заметный приём — отключить лишние проверки и скрипты. Добавь в команду флаги --no-audit и --no-fund: они экономят время на обращении к реестру. Если в проекте нет обязательных postinstall-скриптов, можно добавить --ignore-scripts, но осторожно — он ломает сборки, которые компилируют нативные модули.
Дальше — кеш. Кешировать node_modules плохо, потому что он инвалидируется при любом изменении. Лучше кешировать содержимое ~/.npm: он общий для всех зависимостей, а ключ кеша ставь на хеш package-lock.json. Тогда при изменении одной зависимости ты всё равно получишь hit по остальным пакетам. Используй restore-keys, чтобы при изменении lock-файла брать старый кеш и докачивать только разницу.
И ещё: разбей установку на devDependencies и production. На CI для тестов и линта нужны все, но на этапе сборки образа можно ставить только prod-зависимости через npm ci --omit=dev. Это сокращает время на 30-50%.