В composer.json чем отличаются require и require-dev

В файле `composer.json` секции `require` и `require-dev` используются для определения зависимостей вашего проекта, но у них разные назначения.

`require`
Содержит список пакетов, которые необходимы для работы вашего приложения в любой среде. Эти зависимости требуются для выполнения основного функционала приложения, и они будут установлены независимо от того, в какой среде (разработка, тестирование, продуктив) вы находитесь.

```json
{
    "require": {
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0"
    }
}
```

В этом примере указаны две зависимости, необходимые для работы приложения:

  • `monolog/monolog`: библиотека для логирования.
  • `guzzlehttp/guzzle`: HTTP-клиент.

Эти библиотеки будут установлены при запуске команды `composer install` как в среде разработки, так и в продуктивной среде.

`require-dev`
Содержит список пакетов, которые необходимы только для разработки и тестирования приложения. Эти зависимости включают в себя инструменты тестирования, отладки и другие пакеты, которые не требуются в продуктивной среде.

```json
{
    "require-dev": {
        "phpunit/phpunit": "^9.0",
        "friendsofphp/php-cs-fixer": "^2.0"
    }
}
```

В этом примере указаны две зависимости, необходимые только для разработки:

  • `phpunit/phpunit`: библиотека для написания и выполнения тестов.
  • `friendsofphp/php-cs-fixer`: инструмент для автоматического форматирования кода.

Эти библиотеки будут установлены только при запуске команды `composer install` с флагом `--dev` или `composer install` в среде разработки, но не будут установлены в продуктивной среде, если команда `composer install` выполняется с флагом `--no-dev`.

Основные отличия:

1. Назначение:

  • require: Зависимости, необходимые для работы приложения в любой среде.
  • require-dev: Зависимости, необходимые только для разработки и тестирования.

2. Установка:

  • require: Устанавливаются всегда при выполнении команды `composer install`.
  • require-dev: Устанавливаются только при выполнении команды `composer install` без флага `--no-dev`.

3. Использование в продакшн среде:

  • require: Всегда устанавливаются в продакшн среде.
  • require-dev: Не устанавливаются в продакшн среде, если используется флаг `--no-dev`.
```json
{
    "name": "myproject",
    "description": "A simple project.",
    "authors": [
        {
            "name": "John Doe",
            "email": "john.doe@example.com"
        }
    ],
    "require": {
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0",
        "friendsofphp/php-cs-fixer": "^2.0"
    }
}
```

Команды Composer:

  • Установка всех зависимостей:
  ```sh
  composer install
  ```

Эта команда установит все зависимости из секций `require` и `require-dev`.

  • Установка только продакшн зависимостей:
  ```sh
  composer install --no-dev
  ```

Эта команда установит только зависимости из секции `require`.

Если объяснить совсем просто: `require` — это обязательные библиотеки для работы приложения, а `require-dev` — это дополнительные библиотеки, нужные только разработчикам для работы и тестирования.

June 1, 2024, easyoffer