Drupal Composer рецепти

У цьому пості ми хочемо поділитися деякими рецептами використання Composer, які ми накопичили працюючи з Drupal проектами створеними за допомогою Drupal Composer template. Так само ми розглянемо як перевести існуючий Drupal проект на Composer.

Якщо ви досі не використовуєте Composer в Drupal проектах, ви повинні почати робити це прямо зараз! Drupal Composer template допоможе впоратися з цим завданням. Створити новий проект — дуже просто.

Якщо ви до цих пір не впевнені, погляньте на переваги Drupal Composer розробки:

  • Немає необхідності зберігати код контриб модулів (і саме ядро!) у вашій системі контролю версій.
  • Єдиний інструмент управління пакетами для всього: ядро Drupal, контриб модулі, JS бібліотеки, ваші власні модулі використовуються в різних проектах, і т. д.
  • Максимально простий і зручний патчінг ядра і модулів.
  • Це набагато простіше використання Git submodules.
(Всі рецепти передбачають використання Drupal 8, але вони так само повинні працювати і для Drupal 7)

Установка контриб модулів
  • composer require drupal/<MODULE_NAME>:~8.0
    що б встановити останній стабільний реліз (або останню dev версію, якщо релізів для Drupal 8 поки немає)
  • composer require drupal/<MODULE_NAME>:dev-<BRANCH_NAME>
    що б встановити останню dev версію
  • composer require drupal/<MODULE_NAME>:dev-<BRANCH_NAME>#<COMMIT_HASH>
    що б встановити конкретну версію
Оновлення ядра Drupal та модулів
  • composer update
    оновити
  • composer update --dry-run
    що б перевірити оновлення
  • composer update drupal/<MODULE_NAME>
    що б оновити конкретний модуль
Патчінг пакетів
Плагін cweagans/composer-patches (входить до складу Drupal Composer template) використовує патчі описані в секції «extra» файлу composer.json:

"extra": {
"patches": {
"<PACKAGE/NAME>": {
"<PATCH DESCRIPTION>": "<PATH/TO/PATCH/OR/URL>",
...
},
...
}
}

Приклад:

"extra": {
"patches": {
"drupal/core": {
"Fix language detection": "patches/2189267-24.patch"
}
}
}

Після того як доданий патч, запустіть:

  • composer install
    що б застосувати патч
  • composer update nothing
    або
    composer update --lock
    ) що б composer-patches плагін зробив необхідні зміни у файлі composer.lock
Установка кастомних/форкнутых модулів з Github

Якщо репозиторій модуля містить власний composer.json файл

Зареєструйте репозиторій в секції «repositories» файлу composer.json:

"repositories": [
{
"type": "vcs",
"url": "https://github.com/<REPOSITORY/NAME>"
},
...
],

Використовуйте
composer require drupal/<MODULE_NAME>:dev-<BRANCH_NAME>#<COMMIT_HASH>
що б встановити модуль.

Якщо файл composer.json відсутня в репозиторії модуля

Використовуйте трохи більш розширений варіант:

"repositories": [
{
"type": "package",
"package": {
"name": "drupal/<MODULE_NAME>",
"version": "dev-custom",
"type": "drupal-module",
"джерело": {
"type": "git",
"url": "git@github.com:<REPOSITORY/NAME>.git",
"reference": "<BRANCH-NAME>"
}
}
},
...
],

Використовуйте
composer require drupal/<MODULE_NAME>:dev-custom#<COMMIT_HASH>
що б встановити модуль.

Якщо цільова директорія повинна відрізнятися від modules/contrib

На додаток до вищенаведених рецептами, використовуйте composer/installers плагін:

"extra": {
"installer-paths": {
"web/modules/custom/<MODULE_NAME>": ["drupal/<MODULE_NAME>"],
...
}
}

Установка JS бібліотеки
Популярні JS бібліотеки можуть бути з легкістю встановлені з допомогою Composer, так як вони (швидше за все) вже існують в репозиторії Packagist. Складність полягає в тому що більшість модулів Drupal вимагають установки JS бібліотек в директорію «libraries», в той час як Composer встановлює їх у директорію «vendor».

Плагін composer/installers може передавати шлях установки, але тільки для тих пакетів, які вказують його як залежність. Таким чином, вам потрібно підмінити файл composer.json бібліотеки, вказавши в ньому залежність від composer/installers.

Погляньмо на приклад:

"repositories": [
{
"type": "package",
"package": {
"name": "enyo/dropzone",
"version": "4.3",
"type": "drupal-library",
"джерело": {
"url": "https://github.com/enyo/dropzone.git",
"type": "git",
"reference": "master"
},
"dist": {
"url": "https://github.com/enyo/dropzone/archive/v4.3.0.zip",
"type": "zip"
},
"require": {
"composer/installers": "~1.0"
}
}
},
...
], 
... 
"extra": {
"installer-paths": {
"web/libraries/{$name}" : ["type:drupal-library"],
...
}
}

Після того як цей код доданий в composer.json, запустіть
composer require enyo/dropzone:4.3
що б встановити бібліотеку. Зауважте, що ми вказали конкретну версію і додали секцію «dist» що б Composer міг завантажити zip архів замість клонування репозиторію.

Перемикаємо існуючий пакет на форкнутую версію
Зареєструєте форк-репозиторій в composer.json:

"repositories": [
{
"type": "vcs",
"url": "https://github.com/<REPOSITORY/NAME>"
},
...
],

Запустіть
composer require <PACKAGE/NAME>:dev-<BRANCH_NAME>#<COMMIT_HASH>


Перемикаємо існуючий Drupal 8 project на Composer
  • Зробіть бекап ;)
  • Удилите все чим буде керувати Composer: директорію «core» Drupal, контриб модулі, і т. д.
  • Видалити всі кореневі Drupal файли, такі як index.php, update.php, README.txt… Все їх.
  • Створіть директорію «web» в корені проекту і перемістити туди всі залишилися Drupal директорії (sites, modules, themes, libraries, profiles, і т. д.)
  • Скопіюйте файли Drupal Composer template в корінь проекту.
  • Приготуйте список версій контриб модулів використовуються у проекті, ядра Drupal та всього іншого ніж буде керувати Composer. Потім запустіть
    composer require
    вказуючи конкретну версію для кожної залежності. Вам знадобиться перевести Drupal версії в Composer версії, ось кілька прикладів:

    • drupal/core:8.1.8
      тут все сходиться
    • drupal/admin_toolbar:8.1.15
      поразумевает admin_toolbar 8.x-1.15
    • drupal/ctools:8.3.0-alpha26
      поразумевает ctools 8.x-3.0-alpha26
    • drupal/config_installer:dev-8.x-1.x#a16cc9acf84dd12b9714def53be0ce280a5b0c1a
      поразумевает dev версію config_installer створену з коміта a16cc9a бранчу 8.x-1.x
  • У секції «require» файлу composer.json змініть версії ядра Drupal та контрібних модулів на "~8.0". Це зробить можливим майбутні оновлення.
  • Запустіть
    composer drupal-scaffold
    , це створить необхідні кореневі Drupal файли.
  • Переконайтеся, що ваш веб-сервер використовує диркторию «web» в якості web root.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.