Полный цикл в digital

Установка пакетов Composer

Если вы используете composer.phar локально, то приведённые команды необходимо соответственно изменить в зависимости от того как настроено ваше окружение. Например, если файл composer.phar находится в текущем каталоге и интерпретатор PHP доступен без указания пути к нему, то установка пакета будет осуществляться так:

php composer.phar require vendor/package

При глобальной установке:

composer require vendor/package

Проект на основе пакета

Чаще всего вы будете разворачивать проекты Composer на основе уже существующих пакетов. В этом случае утилита берёт пакет из репозитория и просто распаковывает его в текущую папку, все зависимости помещаются в папку vendor. Для этого используется команда create-project:

composer create-project laravel/laravel ./

Вторым параметром утилите надо передать папку, в которой будет развёрнут проект. В данном случае это текущая папка. После завершения установки вы получите уже развёрнутое приложение и можете начинать его модифицировать.

Установка пакета

Установка пакета через Composer осуществляется посредством выполнения следующей команды, где vendor это имя поставщика php пакета, а package это его название:

composer require vendor/package

Пакеты могут установливаться в две секции:

  • require указываются пакеты, которые необходимы для работы проекта
  • require-dev указывают пакеты, необходимые только для разработки и не влияющие на работу самого проекта

Например, добавление в проект пакета twig через Composer будет осуществляться так:

composer require "twig/twig:^2.0"

Команда require не только загрузит требуемую библиотеку в проект, но и пропишет её добавив информацию о новом пакете в секцию require файла composer.json, обнавив его. Если устанавливаемый пакет зависит от других библиотек, то они также будут установлены или обновлены. Кроме этого ещё будет обновлён файл composer.lock.

Команда require-dev в Composer предназначена для добавления зависимостей, которые необходимы только в процессе разработки и тестирования вашего приложения в секцию require-dev:

composer require --dev "twig/twig:^2.0"

Бывают случаи, когда пакет не хочет устанавливаться из-за несовместимости с платформой. В первую очередь надо убедится, что все необходимые ему расширения PHP в системе установлены.

Если же ваша консольная версия PHP использует другие расширения, а сам пакет будет использоваться только с веб-сервером, можно отключить проверку системных требований пакета с помощью опции --ignore-platform-reqs:

composer require --ignore-platform-reqs vendor/package

Ещё одна ошибка, которую вы можете получить - это не соответствие минимальной стабильности пакета. Все пакеты Composer могут иметь два уровня стабильности:

  1. stable стабильный
  2. dev находится в разработке

Уровень стабильности пакета определяет его разработчик. Эта проблема решается чуть сложнее, надо поменять минимальный уровень стабильности для вашего проекта на dev. Откройте файл composer.json:

nano composer.json

Под имеющийся строчкой License добавьте следующую строчку:

"minimum-stability": "dev",

Если в файле уже есть строчка minimum-stability, необходимо заменить её значения со stable на dev. После этого вы сможете установить пакет composer, который вам необходим.

Установка всех пакетов из файла composer.json

Установка сразу всех пакетов в проект осуществляется посредством команды:

composer install

Эта команда работает следующим образом:

  1. Проверяет, имеется ли файл composer.lock
  2. Если файл composer.lock существует, устанавливает версии указанные в нём
  3. Если файла composer.lock нет, тогда выполняется composer.json, создаётся файл composer.lock

Возьмем для примера вот такой файл:

composer.json{
  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": ["framework", "laravel"],
  "license": "MIT",
  "type": "project",
  "require": {
      "php": ">=5.6.4",
      "laravel/framework": "5.3.*"
  },
  "require-dev": {
      "fzaninotto/faker": "~1.4",
      "mockery/mockery": "0.9.*",
      "phpunit/phpunit": "~5.0",
      "symfony/css-selector": "3.1.*",
      "symfony/dom-crawler": "3.1.*"
  },
  "autoload": {
      "classmap": [
          "database"
      ],
      "psr-4": {
          "App\\": "app/"
      }
  },
  "autoload-dev": {
      "classmap": [
          "tests/TestCase.php"
      ]
  },
  "scripts": {
      "post-root-package-install": [
          "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
      ],
      "post-create-project-cmd": [
          "php artisan key:generate"
      ],
      "post-install-cmd": [
          "Illuminate\\Foundation\\ComposerScripts::postInstall",
          "php artisan optimize"
      ],
      "post-update-cmd": [
          "Illuminate\\Foundation\\ComposerScripts::postUpdate",
          "php artisan optimize"
      ]
  },
  "config": {
      "preferred-install": "dist"
  }
}

Пакеты, которые Composer должен установить перечислены в секциях:

  • require указываются пакеты, которые необходимы для работы проекта
  • require-dev указывают пакеты, необходимые только для разработки и не влияющие на работу самого проекта

В секциях указаны, так называемые зависимости. Для каждого пакета указана версия. Composer последовательно устанавливает указанные пакеты и разрешает зависимости уже самих пакетов. У пакетов есть свои зависимости и эти зависимости указываются также в composer.json самого пакета. Например, посмотрим на исходник пакета fzaninotto/faker, указанного в секции require-dev. У него в корне можно найти файл composer.json, в котором указаны зависимости для этого пакета.

После того, как все пакеты будут установлены, Composer сформирует файл composer.lock, в котором зафиксирует установленные версии пакетов. Для чего это нужно? Если вы ведёте коллективную разработку, то ваш коллега скачав pull проект с гит-репозитория должен получить тоже окружение и версии всех пакетов, если у вас в composer.json версия для пакета жёстко не зафиксирована, а указана через маску:

{
  "require": {
      "vendor/somepackage": "1.*"
  }
}

Например, на момент разработки у вас установлена версия 1.1, в composer.lock будет указана версия 1.1. Тогда ваш коллега при установке получит ту же версию пакета, которая установлена у вас, даже если вышла новая версия 1.2. Именно поэтому практически всегда проекты имеют файл composer.lock в репозитории.

Обновление пакетов

Команда update используется для обновления зависимостей. Она использует только composer.json. Например, если для пакета указана версия с маской 1.* или ~2.3.0 или dev-master Composer проверит есть ли более новая версия в репозитории для установленного пакета и если есть, установит её. И так для каждого пакета. После этого Composer обновит файл composer.lock.

При установке проекта в случае, если файл composer.lock отсутствует, команды install и update действуют одинаково. Запомните, при первой установке, а также когда вы загрузили из репозитория новую версию вашего проекта, всегда используйте комманду install, которая проверит изменения в файле composer.lock. Когда в рабочем проекте нужно установить новые пакеты, обновить установленные или удалить ненужные, понадобится команда update. Можно использовать альтернативные команды require и remove, которые будут рассмотрены ниже.

Обновление всех пакетов, если удалили пакет из composer.json, значит он будет деинсталирован:

composer update

Обновление или установка указанных пакетов, если укажите пакет который удалили из composer.json, значит он будет деинсталирован:

composer update vendor/package

Обновление пакетов разработчика:

composer update --dev

Зависимости require и require-dev

В секции require указываются пакеты, которые необходимы для работы проекта. Это могут быть комментарии, админка, функции для работы с датами и т.п. В секции require-dev указывают пакеты, необходимые только для разработки и не влияющие на работу самого проекта.

Можно заметить, что при установке или обновлении Composer устанавливает пакеты из обоих секций. Тогда возникает вопрос, зачем их делить? Это разделение условное и им управляете вы сами. Composer сам не может определить, где он запускается — на сервере разработки или продакшене. Поэтому, при разворачивании проекта на продакшене, нужно указать Composer чтобы он, не устанавливал пакеты для разработки из секции require-dev.

composer install --no-dev

При обновлении также указывать ключ --no-dev:

composer update --no-dev

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг