Composer

Composer — пакетный менеджер для языка программирования PHP, написанный на PHP. Основная задача Composer — управление зависимостями проекта, также, как это делает npm\yarn для node.js, pip для python и др.

Зависимости от Composer в виде компонентов Symfony, появились начиная с Drupal 8.0, в дальнейшем, с релиза Drupal 8.1, у Drupal появились собственные репозитории в композере и появилась возможность управлять зависимостями друпала полностью при помощи Composer.

Шаблоны проектов

Composer позволяет создавать новые проекты из уже имеющихся. Это равносильно клонированию репозитория проекта с последующим вызовом composer install.

Для Drupal также существует ряд готовых composer проектов с Drupal:

Совет

Не используйте на production сайтах команду require, изучите её аналог install и в чем их отличие.

Примеры использования

Установка новых зависимостей

Установка Drupal проекта последней стабильной версии:

composer require drupal/paragraphs

Установка Drupal проекта конкретной версии. При данном подходе, модуль обновляться не будет.

composer require drupal/paragraphs:1.8

Пример установки Drupal проекта из dev-версии. При данном подходе, зависимость будет обновляться только в пределах dev версии.

composer require drupal/drupal:1.0-dev

Пример установки Drupal проекта из dev-версии, но с блокировкой на определенный коммит. Данный пакет будет установлен из гит репозитория проекта на определенный коммит. Вы можете указать hash ID коммита целиком, либо первые 7 символов.

composer require drupal/drupal:1.0-dev#be6a91c

Установка зависимостей

Данная команда установит все зависимости сайта, которые были запрошены при помощи require.

composer install
Совет

Используйте данную команду на продакшене для установки зависимостей с минимальным потреблением ресурсов. Вы также можете добавить аргумент --no-dev, чтобы сократить количество зависимостей, исключив из установки те, что необходимы только в процессе разработки сайта и не требуются для его штатной работы.

Обновление зависимостей

Пример команды обновления всех зависимостей на проекте, включая ядро, модули, и зависимости зависимостей.

composer update --with-dependencies -o

Пример обновления конкретной зависимости.

composer update drupal/paragraphs

Пример обновления конкретной зависимости, а также зависимостей указанных для него.

composer update drupal/paragraphs --with-dependencies -o

Удаление зависимостей

Пример удаления Drupal проекта.

composer remove drupal/paragraphs
Предупреждение

Удаление зависимости через Composer, удалит файлы физически с проекта. Прежде чем выполнять команду, убедитесь, что вы удалили модуль с проекта при помощи административного интерфейса или команды drush pmu MODULENAME.

Патчинг зависимостей

Иногда в модулях для Drupal, или в самом ядре, обнаруживают ошибки. Для исправления ошибок готовят патчи, которые в дальнейшем попадут в dev релиз, а затем в стабильный.

Для применения патчей, необходимо чтобы на проекте была установлена зависимость cweagans/composer-patches. После чего, вы можете указывать патчи в разделе "extra.patches".

{
    ...
    "extra": {
        ...
        "patches": {
          "drupal/core": {
            "Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch",
            "Patch from local file": "./patches/fix.patch"
          }
        }
    },
}

Советы и рекомендации

  • Используйте Composer для управления всеми зависимостями Drupal сайта. Не нужно загружать часть зависимостей архивами с drupal.org, а другую часть через Composer. Со временем, поддерживать станет очень проблематично.
  • Не пытайтесь игнорировать Composer. Вы не сможете постоянно игнорировать необходимость использования Composer, поэтому, лучше научитесь им пользоваться.
  • require - для разработки, install - для продакшена. Запомните это правило, оно решит множество вопросов и проблем.

Смотрите также

Ссылки

💝 Помогите нам сделать документацию лучше!

Вся документация Druki с отрытым исходным кодом. Нашли ошибку или неточность? Создайте pull request.

Редактировать текущий документ Обсудить улучшение

Или узнайте как контрибутить.

🤔 По-прежнему нужна помощь?

Не нашли ответа на свой вопрос? Попросите помощи у сообщества!

Задайте вопрос на GitHub Смотрите другие ресурсы сообщества