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


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.