Обновление зависимостей может стать нетривиальной задачей, особенно на проектах, которые существуют долгое время. В этой статье будут приведены советы как остаться up-to-date и сделать обновление как можно более безболезненным.
Самые плохие зависимости — устаревшие зависимости. Если вы поддерживаете ваш проект на постоянной основе, обновление одной зависимости не должно занимать больше нескольких минут. На обновление нескольких зависимостей в одно и то же время, особенно если они включают критические изменения (breaking changes), могут уйти часы.
Старайтесь обновляться раз в несколько дней или раз в несколько недель в зависимости от величины проекта, количества зависимостей и скорости с которой обновляются эти зависимости.
При включении новой зависимости подумайте о том, какая версия вам нужна.
Если предположить, что пакет использует семантическое версионирование (semver), скорее всего лучшим решением будет использовать минорную версию. Т.е. например для Laravel это будет
Использование мажорной версии (например,
Lock-файл хранит все зависимости и точные версии, которые были установлены. Если вы подключаете Laravel с версией
Это особенно важно, когда вы работаете в команде. У каждого коллеги будут установлены точно такие же зависимости как и у вас.
Composer использует lock-файл по умолчанию, тут нет проблем. Bower не поддерживает lock-файл и его нужно постараться заменить на другой менеджер если у вас есть такая возможность.
В npm есть возможность использовать lock-файл. После установки зависимостей запустите
Yarn это новый прекрасный менеджер зависимостей от Facebook, который по умолчанию создает lock-файл. Этот менеджер относительно нов и тяжело сказать о его надежности и готовности к полноценному использованию. Например, в моем случае он не работал потому что общие папки (shared folders) в VirtualBox не поддерживают символические ссылки.
1. Обновляйтесь регулярно
Самые плохие зависимости — устаревшие зависимости. Если вы поддерживаете ваш проект на постоянной основе, обновление одной зависимости не должно занимать больше нескольких минут. На обновление нескольких зависимостей в одно и то же время, особенно если они включают критические изменения (breaking changes), могут уйти часы.
Старайтесь обновляться раз в несколько дней или раз в несколько недель в зависимости от величины проекта, количества зависимостей и скорости с которой обновляются эти зависимости.
2. Правильно определяйте версии
При включении новой зависимости подумайте о том, какая версия вам нужна.
Если предположить, что пакет использует семантическое версионирование (semver), скорее всего лучшим решением будет использовать минорную версию. Т.е. например для Laravel это будет
5.3.*
.Использование мажорной версии (например,
5.*
) скорее всего будет слишком неопределенно, т.к. Laravel делает значительные изменения между минорными версиями. Использование патч-версии (например, 5.3.19
) чрезмерно точное и усложняет управление зависимостями без необходимости.3. Используйте менеджер зависимостей с lock-файлом
Lock-файл хранит все зависимости и точные версии, которые были установлены. Если вы подключаете Laravel с версией
5.3.*
, lock-файл будет хранить точную на момент установки версию (например 5.3.1
или 5.3.19
).Это особенно важно, когда вы работаете в команде. У каждого коллеги будут установлены точно такие же зависимости как и у вас.
Composer использует lock-файл по умолчанию, тут нет проблем. Bower не поддерживает lock-файл и его нужно постараться заменить на другой менеджер если у вас есть такая возможность.
В npm есть возможность использовать lock-файл. После установки зависимостей запустите
npm shrinkwrap [--dev]
, эта команда сгенерирует npm-shrinkwrap.json
файл, который нужно закоммитить в репозиторий. Если этот файл присутствует когда вы запускаете npm install
, будут установлены те же версии.Yarn это новый прекрасный менеджер зависимостей от Facebook, который по умолчанию создает lock-файл. Этот менеджер относительно нов и тяжело сказать о его надежности и готовности к полноценному использованию. Например, в моем случае он не работал потому что общие папки (shared folders) в VirtualBox не поддерживают символические ссылки.
Поделиться с друзьями
Комментарии (6)
BasicWolf
30.10.2016 21:02Очень поверхностная статья. «Регулярно обновляйтесь» — это очень хорошо в теории, но на практике в проекте с эдак 20-30 зависимостями, ой как легко всё сломать, из-за кривой обратной совместимости в каком-либо пакете.
ИМХО, для серьёзных проектов более приемлим подход а-ля Debian Stable, с пусть устаревшими, но проверенными временем зависимостями и обновлениями являющимися фиксами, а не апгрейдами.
prefrontalCortex