Мне периодически нужно обновлять зависимости в проектах: где-то из-за соображений безопасности, где-то для новых фичей, где-то просто хочется. Конечно, можно запустить
npm update, но если версии зависимостей прибиты гвоздями в package.json, то эффект слабый. Можно использовать npm outdated и руками проходится по всем пакетам. Или написать bash-скрипт, который распарсит это дело и установит latest-версии.Но я же не первый, кто про это задумался. Есть очень удобный npm-check-updates, у которого куча опций, сильно упрощающих процесс. Почитайте Readme, документация у проекта хорошая.
Как его использую я:
1. Ставлю пакет как глобальную зависимость
npm install -g npm-check-updates.2.
ncu --interactive --format group — вывожу список доступных обновлений с группировкой по семверу. Накатываю патчи, тестирую.3.
git commit — сохраняю слепок проекта, чтобы была возможность откатиться.4.
ncu --interactive --format group — накатываю миноры, тестирую. Иногда уже на этом этапе выясняется, что какие-то пакеты решили переехать на ES-модули без мажорного обновления. Если получается мелкими правками в коде починиться, то профит. Если нет, то откатываюсь на рабочую версию и пробую накатывать только те пакеты, которые ничего не ломают. На это уходит чуть больше времени.5.
git commit — сохраняю слепок проекта, чтобы была возможность откатиться.6.
ncu --doctor -u — пробую обновить всё оставшееся, но пакет по-умному запускает npm test и обновляет только то, что не роняет тесты в проекте. Так как иногда в проектах есть скриншотные тесты, для которых нужно не только установить проект, но ещё и собрать и запустить, то на этом этапе можно переключиться на чтение отложенных статей, приготовление кофе, созвоны с коллегами. К сожалению, на этом этапе скрипт чаще всего ничего не обновляет, но по логам прогона тестов и сборки можно хотя бы понять, что именно ломается.7. Тестирую,
git commit, git push.Если вы точно знаете, что какие-то библиотеки не нужно обновлять, рядом можно положить файлик
.ncurc.json, куда прописать в reject список прибитых гвоздями зависимостей. Например, версии фреймворка, TS, специфичных сборщиков.npm-check-updates тянет с собой много зависимостей, кого-то это может смутить. Поэтому не стесняйтесь искать удобные вам альтернативы. Главное, оптимизируйте свою работу. Пускай страдают машины.