Управління залежностями бібліотеки модулів за допомогою композитора


9

Я знайшов залежності в користувацькому модулі з drupal-composer , як я можу включити сторонній бібліотеку в свій спеціальний модуль без використання диспетчера композиторів і як керувати модулями contrib залежність композиторів від drupal 8, які відкидаються на моє запитання, але ні здається, більше застосовується з часу Drupal 8.1 та знецінення менеджера композиторів .

Також такі популярні довідники, як "Остаточне вступ до D8" і "Композитор", більше не застосовуються, оскільки вони також згадують менеджера композиторів.

Інше рішення, на противагу менеджеру композиторів, змінює файл composer.json в ядрі, як занадто багато хакерства в ядрі, і, ймовірно, зламається з кожним оновленням драйву ядра Drupal (?).

Більш конкретно, я намагаюся оновити Views vCards від Drupal 7 до 8. Я створив свій файл composer.json таким чином:

{
  "name": "drupal/views_vcards",
  "description": "Allows creation of vCards using the fields provided by the Views module.",
  "type": "drupal-module",
  "license": "GPL-2.0+",
  "homepage": "https://drupal.org/project/views_vcards",
  "require": {
    "maennchen/zipstream-php": "0.3.*"
  }
}

Але якщо я поміщаю файл composer.json у папку свого модуля, як я можу повідомити Drupal про те, що цей файл є, і як переконатися, що потрібна zipstream-phpбібліотека завантажена?

Просто запуск composer updateз кореня Drupal оновлює багато залежностей від Drupal, але він не включає файли composer.json, які знаходяться в папках модулів. Я також не припускаю, що мені слід телефонувати composer installзсередини всіх модулів із залежностями.

Як зробити так, щоб Drupal усвідомив залежність модуля без використання менеджера композиторів та / або злому ядра?

ОНОВЛЕННЯ:

Композитор злиття плагін , який використовується основним , як видається, підтримує підстановочні шлях:

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json" // < ---- THIS LINE
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "merge-dev": true,
            "merge-extra": false
        }
    }
}

Чому ядро ​​не об'єднується modules/*/composer.json, це все вирішить правильно?

Оновлення 2:

Міркування про непідтримування цього питання висвітлюються в цьому питанні (яке також вже певний час замовчується).


1
Редагування основного файлу композитора виправлено способом.
Еял

Якщо ви дозволите композитору управляти всіма вашими залежностями (ядро включено), то ваше питання зникне. Дивіться packgist.org/packages/drupal/core
Eyal

Ось приклад файлу композитора, який я написав для іншого питання: drupal.stackexchange.com/a/187097/40011
Eyal

Дякуємо за відповідь @Eyal. Отже, керування всіма модулями contrib через composer.jsonфайл - це новий рекомендований спосіб, і друк для завантаження та установки модулів замінюється? Очевидно, що композитор автоматично вирішить вкладені залежності, а також завантажуватиме мої залежності.
Neograph734

Відповіді:


6

Новий метод використання drupal-ешафотів для найбільшої гнучкості

Для Drupal 8.4.0 і новіших версій за допомогою drush> 9.0.0 , ударний режим застарілий, і ви повинні використовувати повноцінний робочий потік композитора, як це детально описано в посиланнях на документацію drupal.org нижче. Ці посилання рекомендують використовувати композиторський проект, але це може не працювати для всіх веб-серверів. Далі описано покрокове налаштування composer.json вручну для детального пояснення. Інструкції щодо додавання модулів вручну все ж можна виконати.

# Initialize composer. Stability alpha is important for custom modules that may be source managed outside of packagist or drupal.org
composer init --name myvendor/mysite --stability=alpha --license=GPLv2
composer config repositories.drupal composer https://packages.drupal.org/8
composer config discard-changes true

Тоді вам потрібно вручну додати до composer.json наступне, виходячи з ваших уподобань, оскільки немає можливості зробити це автоматично з композитором як є. Вони налаштують drupal-scaffold для встановлення ваших модулів там, де ви їх хочете (на відміну від постачальника / або каталогу, обраного іншим розробником). Змініть "webroot" на "www" або "public" або те, що ваш хост.

    "extra": {
        "installer-paths": {
            "webroot/core": ["type:drupal-core"],
            "webroot/modules/contrib/{$name}": ["type:drupal-module"],
            "webroot/modules/custom/{$name}": ["type:drupal-custom-module"],
            "webroot/themes/contrib/{$name}": ["type:drupal-theme"],
            "webroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
            "webroot/profiles/{$name}": ["type:drupal-profile"],
            "webroot/libraries/{$name}": ["type:drupal-library"]
        },
        "patches": {}
    },
    "scripts": {
        "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
    }

Тепер ви можете встановити деякі залежності. Зауважте, що композитор повинен мати можливість використовувати сценарії та плагіни для цього.

composer require composer/installers:^1.4.0 drupal-composer/drupal-scaffold:^2.3.0 cweagans/composer-patches:^1.6.2

Запустіть сценарій drupal-scaffold один раз (або на своєму сервері побудови за потребою):

composer drupal-scaffold

Ядро Drupal, модулі, теми тощо ... можна встановити згідно з інструкціями нижче без додатка drupal-merge-plugin.

composer require drupal/core:~8.5.1 drupal/views_vcards

Старіший метод, використовуючи drupal-merge-plugin або безпосередньо працюючи з core

Для Drupal 8.1.0 і вище ви можете використовувати композитор, щоб вимагати безпосередньо модулів Drupal. Документація навколо використання Composer в проекті Drupal та Використання Composer для встановлення пакетів Drupal через Drupal.org було оновлено, щоб скористатися пакувальником пакету drupal.org. Я вважаю, що це працює добре вже в сценарії розгортання.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require drupal/views_vcards

Що стосується розвитку, я думаю, що вручну додавання в залежність composer requireпрацює чудово. Підхід до злиття також працює з плагіном drupal-merge-плагін, і я використовую це для того, щоб робочий потік працював.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require mile23/drupal-merge-plugin
composer update

Оновлення 2016.06.22

Я зіткнувся з проблемою, використовуючи drush make, який додав традиційні теги версій Drupal та URL-адреси пакувальника drupal.org за допомогою semver. З цією метою мені потрібно було перейти на використання стабілізованого пакувальника на https://packagist.drupal-composer.org , який досі підтримує традиційні теги версій Drupal.

Також зауважте, що серверу чи машині збирання потрібен надмірно великий об'єм пам'яті, щоб здійснити оновлення композитора (або потрібно), що необхідно в усіх сценаріях, коли запускати оновлення композитора на подібній машині розробки неможливо у процесі збирання.

Оновлення 2016.09.23

Оновлення 2018.03.30

  • Помітив голосування. Це досить давно, тому я вирішив роз'яснити новітні розробки та налаштування свого сайту безпосередньо разом із композитором, оскільки ударна копія була (на жаль) застарілою протягом певного часу.

1
Я все ще дуже звик використовувати drush для завантаження та встановлення модулів, але це буде повністю замінено композитором?
Neograph734

Ось як це зараз роблять drupalci, але перед цим ви могли безпосередньо використовувати плагін злиття. Патч, який я написав для drupalci, спочатку був drupal.org/files/isissue/2597778-composer-contrib-18.patch . Це було зроблено, але тепер уже не в кодовій базі, оскільки спрощено використовувати пакувальник і робити все від композитора iirc. Я також роблю наступні дії з TravisCI: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Це буде залежати від вашої роботи.
mradcliffe

Можливо, варто додати тут розмиття щодо програми Asset Packagist для сторонніх бібліотек з композитором. Цю методологію застосовують ряд дистриб'юторів Drupal, а зараз використовують і декілька модулів, що надають внесок. Я щойно вніс документацію для офіційного оформлення цього рішення drupal.org/docs/develop/using-composer/… та drupal.org/docs/develop/using-composer/…
JamesWilson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.