Управление зависимостями библиотеки модулей с помощью composer

9

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

Также популярные руководства, такие как окончательное введение в D8 и Composer, похоже, больше не применяются, поскольку в них также упоминается менеджер композиторов.

Другое решение, в отличие от менеджера композиторов, изменение файла ядра composer.json выглядит как слишком большой взлом ядра и, вероятно, будет нарушаться при каждом обновлении Drush ядра 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:

Обоснование того, что это не поддерживается, рассматривается в этом выпуске (который также некоторое время оставался тихим).

Neograph734
источник
1
Редактирование основного файла композитора является исправленным способом.
Eyal
Если вы позволите composer управлять всеми вашими зависимостями (включая ядро), ваша проблема исчезнет. См. Packagist.org/packages/drupal/core
Eyal
Вот пример файла композитора, который я написал для другого вопроса: drupal.stackexchange.com/a/187097/40011
Eyal
Спасибо за ответ @Eyal. Таким образом, управление всеми модулями contrib через composer.jsonфайл - это новый рекомендуемый способ, и заменяется drush для загрузки и установки модулей? Очевидно, что композитор автоматически разрешит вложенные зависимости и действительно также загрузит мои зависимости.
Neograph734

Ответы:

6

Новый метод с использованием drupal-scaffold для максимальной гибкости

Для Drupal 8.4.0 и более поздних версий , использующих drush> 9.0.0 , drush make не рекомендуется использовать, и вам следует использовать полный рабочий процесс компоновщика, как описано в ссылках на документацию по 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 следующее, исходя из ваших предпочтений, потому что не существует способа сделать это автоматически с composer как есть. Они настроят drupal-scaffold для установки ваших модулей там, где вы хотите (в отличие от vendor / или каталога, выбранного другим разработчиком). Измените '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 должен иметь возможность использовать сценарии и плагины, чтобы это работало.

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 или работа с ядром напрямую

Для Drupal 8.1.0 и выше, вы можете использовать composer для непосредственного использования модулей Drupal. Документация по использованию Composer в проекте Drupal и использованию Composer для установки пакетов Drupal через Drupal.org была обновлена, чтобы воспользоваться преимуществами packagist drupal.org. Я считаю, что это хорошо работает уже в сценарии развертывания.

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

Для разработки думаю, что ручное добавление в зависимость с composer requireотлично работает. Подход слияния работает и с drupal-merge-plugin, и я использую его для своего рабочего процесса drush make.

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

  • Заметил голосование. Это довольно старая версия, поэтому мы решили уточнить о более поздних разработках и настройке вашего сайта непосредственно с помощью composer, так как drush make некоторое время (к сожалению) устарела.
mradcliffe
источник
1
Я до сих пор очень привык использовать drush для загрузки и установки модулей, но что будет полностью заменено на composer?
Neograph734
Вот как это делает drupalci, но до этого вы могли напрямую использовать плагин слияния. Изначально я написал патч для drupalci: drupal.org/files/issues/2597778-composer-contrib-18.patch . Это было зафиксировано, но теперь больше не в кодовой базе, так как упрощено использование packagist и все из composer iirc. С TravisCI я также делаю следующее: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Это будет зависеть от вашего рабочего процесса.
Мрадклифф
Возможно, стоит добавить рекламу об Asset Packagist здесь для сторонних библиотек с Composer. Эта методология используется рядом дистрибутивов Drupal, и несколько модулей contrib теперь также используют ее. Я только способствовали некоторые документы , чтобы это решение будет официально drupal.org/docs/develop/using-composer/... и drupal.org/docs/develop/using-composer/...
Джеймс Энтони Уилсон