Composer: разница между require и require-dev
Сегодня, в очередной раз, мне поступил вопрос о том, в чем разница между секциями require и require-dev в файле composer.json, давайте разберемся..
Начнем с того, что разберемся с немного другими терминами, а именно режимами (средами) в которых работает программное обеспечение, чаще всего это:
- Development (разговорный термин - "девелоп") - режим в котором над программным обеспечением работают разработчики делая ту или иную функциональность, чаще всего в этом режиме включен вывод пользователю разнообразных ошибок и разной отладочной информации.
- Testing (разговорный термин - тестинг) - режим в котором тестировщики тестируют готовую функциональность. Вывод ошибок пользователю и отладочной информации чаще всего включен.
- Staging (разговорный термин - стейдж или стейджинг) - режим в котором заказчик тестирует готовую функциональность, вывод ошибок пользователю отключен и перенаправлен в лог файлы. Все настройки максимально приближены к продакшену.
- Production (разговорный термин - продакшн) - Режим в котором программное обеспечение используют реальные пользователи. Выводить ошибки и делать правки в этом режиме не рекомендуется.
Данные 4-е режима можно разделить еще на две группы
- Development + Testing = показываем ошибки и отладочную информацию, ведем разработку ПО
- Staging + Production = НЕ показываем ошибки и отладочную информацию, НЕ ведем разработку в этих режимах.
Теперь вернемся к Composer-у. Он поддерживает два типа зависимостей, список зависимостей для разработки (require-dev) и список зависимостей для продакшена (require). Например, во время разработки, мы можем что-то тестировать с помощью PHP Unit и нам нужна такая зависимость, но когда все готово и протестировано, нам это зависимость не нужна и ее нет смысла тащить на продакшен сервер, т.к. по логике тестировать там что-то нельзя.
- Staging + Production = зависимости нужные для работы в этом режиме помещаем в секцию require, файла composer.json
- Development + Testing = зависимости которые нужны в этих режимах, но еще не включены в require, помещаем в секцию require-dev, файла composer.json
Пример из файла composer.json, проекта на фреймворке Yii2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
... "require": { "php": ">=7.2.0", "yiisoft/yii2": "~2.0.14", "yiisoft/yii2-bootstrap": "~2.0.0", "yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0" }, "require-dev": { "yiisoft/yii2-debug": "~2.1.0", "yiisoft/yii2-gii": "~2.1.0", "yiisoft/yii2-faker": "~2.0.0", "codeception/base": "~2.3.0", "codeception/verify": "~0.4.0", "codeception/specify": "~0.4.6", "symfony/browser-kit": ">=2.7 <=4.2.4" }, .. |
То, что находится в секции require - это обязательные зависимости для всех режимов, а то, что в секции require-dev только для режима "разработки".
Теперь, разберемся как устанавливать зависимости для разных режимов. Для режима разработки, мы просто запускаем
1 2 3 |
composer install |
зависимости из обоих секций будут обработаны и установлены.
Для продакшен режима, мы используем опцию --no-dev, вот так
1 2 3 |
composer install --no-dev |
в этом случае, будут установлены только зависимости из раздела require.
Если просуммировать все, то секции
- require = зависимости для всех режимов
- require-dev = зависимости только для режима разработки
указывают какие зависимости будут утсановлены, когда вы запускаете команды
- composer install = зависимости из require и require-dev
- composer install --no-dev = зависимости только из require
такое разделение используется, чтобы разделить зависимости для разных режимов работы - режима продакшена и режима разработки.
Author: | Tags: /
| Rating:
Leave a Reply