Как можно обновить каждую зависимость в package.json до последней версии?
Я скопировал package.json из другого проекта и теперь хочу обновить все зависимости до их последних версий, так как это новый проект, и я не против что-то исправить, если что-то сломается.
Какой самый простой способ сделать это?
Лучший способ, который я знаю, это выполнить npm info express version и затем вручную обновить каждую зависимость в package.json. Должен быть лучший способ.
{
"name": "myproject",
"description": "my node project",
"version": "1.0.0",
"dependencies": {
"express": "^3.0.3", // как мне обновить их до последних версий?
"mongodb": "^1.2.5",
"underscore": "^1.4.2"
}
}
Для решений, специфичных для Yarn, обратитесь к этому вопросу на Stack Overflow.
Обновление всех зависимостей в package.json до последних версий
Чтобы обновить все зависимости в вашем файле package.json до последних версий, можно использовать несколько автоматизированных подходов, которые гораздо эффективнее ручной проверки каждой зависимости. Наиболее распространенные методы включают использование команд npm, команд Yarn или специализированных инструментов, таких как npm-check-updates или yarn-upgrade-all.
Содержание
- Использование команд npm
- Использование команд Yarn
- Сторонние инструменты
- Лучшие практики и рекомендации
- Откат обновлений
Использование команд npm
npm outdated
Сначала проверьте, какие зависимости имеют доступные обновления:
npm outdated
Эта команда покажет вам:
- Имя пакета
- Текущая версия
- Желаемая версия (последняя совместимая версия)
- Последняя версия (абсолютно последняя)
- Расположение в дереве зависимостей
npm update
Чтобы обновить все зависимости до их последних совместимых версий:
npm update
Эта команда обновляет зависимости на основе диапазонов версий, указанных в package.json, поэтому она не обновит зависимость с ^1.2.3 до ^3.0.0, если это нарушит совместимость.
npm install с флагом @latest
Чтобы принудительно установить последние версии (игнорируя ограничения версий):
npm install
Но это не обновляет сам файл package.json.
Обновление манифеста package.json
Наиболее полное решение для npm - использовать пакет npm-check-updates:
- Сначала установите пакет:
npm install -g npm-check-updates
- Затем запустите его для обновления вашего package.json:
ncu -u
- Наконец, установите обновленные зависимости:
npm install
Это автоматически обновит ваш package.json с последними совместимыми версиями и установит их.
Использование команд Yarn
yarn outdated
Аналогично npm, проверьте наличие устаревших зависимостей:
yarn outdated
yarn upgrade
Обновите все зависимости до их последних версий в указанных диапазонах:
yarn upgrade
yarn upgrade-interactive
Для интерактивного контроля над обновлением пакетов:
yarn upgrade-interactive
yarn upgrade --latest
Принудительное обновление до последних версий (даже если это нарушает semver):
yarn upgrade --latest
Для Yarn 1.x против Yarn 2.x+
Обратите внимание, что Yarn 2.x+ (Berry) имеет другие команды. Для Yarn 2+:
yarn up
Сторонние инструменты
npm-check-updates
Как упоминалось ранее, это один из самых популярных инструментов для обновления package.json:
# Установить глобально
npm install -g npm-check-updates
# Обновить package.json до последних версий
ncu -u
# Установить обновленные пакеты
npm install
yarn-upgrade-all
Для пользователей Yarn этот пакет предоставляет аналогичную функциональность:
# Установить глобально
yarn global add yarn-upgrade-all
# Запустить обновление
yarn-upgrade-all
depcheck
Еще один полезный инструмент, который может помочь определить устаревшие зависимости:
# Установить глобально
npm install -g depcheck
# Проверить наличие устаревших пакетов
depcheck
Outdated
Простой CLI-инструмент для проверки устаревших пакетов:
# Установить глобально
npm install -g outdated
# Запустить проверку
outdated
Лучшие практики и рекомендации
Диапазоны версий
При обновлении зависимостей учитывайте диапазоны версий:
^(каретка): позволяет совместимые обновления (например, ^1.2.3 может обновиться до 1.3.0, но не до 2.0.0)~(тильда): позволяет обновления патчей (например, ~1.2.3 может обновиться только до 1.2.x)*(звездочка): позволяет любое обновление
Безопасность прежде всего
Хотя вы упомянули, что не против исправлять поломки, все же разумно:
- Тестировать приложение после крупных обновлений
- Использовать систему контроля версий для легкого отката изменений
- Рассмотреть возможность обновления поэтапно, а не все сразу
Обновления безопасности
Для критически важных с точки зрения безопасности проектов сосредоточьтесь на обновлении пакетов с известными уязвимостями безопасности в первую очередь.
Откат обновлений
Если обновления вызывают проблемы, вы можете легко откатить изменения:
Использование npm
# Вернуться к состоянию package-lock.json
npm install
# Или удалить package-lock.json и node_modules, затем переустановить
rm -rf node_modules package-lock.json
npm install
Использование Yarn
# Вернуться к состоянию yarn.lock
yarn install
# Или чистая переустановка
rm -rf node_modules yarn.lock
yarn install
Использование системы контроля версий
Если вы зафиксировали изменения перед обновлением:
# Вернуть package.json и lock-файл
git checkout package.json package-lock.json
# или для Yarn:
git checkout package.json yarn.lock
# Переустановить
npm install
# или:
yarn install
Самый простой подход для вашей ситуации - использовать npm-check-updates (ncu -u), затем выполнить npm install, или если вы предпочитаете Yarn, yarn upgrade --latest. Эти методы автоматизируют весь процесс проверки обновлений и обновления как вашего файла package.json, так и ваших реальных зависимостей.
Источники
- Документация npm-check-updates
- Документация команды Yarn Upgrade
- Документация npm Outdated
- Лучшие практики для менеджеров пакетов Node.js
Заключение
- Самый простой способ обновить все зависимости - использовать
npm-check-updates(ncu -u), затем выполнитьnpm install, илиyarn upgrade --latestдля пользователей Yarn - Эти инструменты автоматически определяют последние версии и соответствующим образом обновляют ваш файл package.json
- Хотя вы упомянули, что не против исправлять поломки, все же разумно тестировать приложение после крупных обновлений
- Всегда используйте систему контроля версий для легкого отката изменений, если обновления вызывают проблемы
- Для критически важных с точки зрения безопасности проектов рассмотрите возможность обновления пакетов с известными уязвимостями в первую очередь
- Ручной подход проверки каждого пакета с помощью
npm info express versionдействительно гораздо менее эффективен, чем использование этих автоматизированных инструментов