composerによるモジュールライブラリの依存関係の管理


9

私が見つけたdrupalの-作曲とカスタムモジュールで依存関係私は作曲マネージャを使用せずに、私のカスタムモジュールで、サードパーティのライブラリを含むことができ、どのようにしてDrupalの8上のcontribモジュール作曲の依存関係を管理するためにどのように私の質問にreleatedされている、ありませんDrupal 8.1以降とComposerマネージャーの廃止により、より長く適用されるようです。

また、D8やComposerの決定的な紹介などの人気のあるガイドは、Composer Managerについても言及しているため、もはや適用されていないようです。

composerマネージャーに反対する他のソリューションは、コアのcomposer.jsonファイルを変更して、コアのハッキングが多すぎるように感じ、Drupalコア(?)のすべてのDrush更新で壊れる可能性があります。

具体的には、Views vCardを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 updateDrupalルートから単純に実行すると、多くのDrupal依存関係が更新されますが、モジュールフォルダーにあるcomposer.jsonファイルは含まれません。またcomposer install、依存関係のあるすべてのモジュール内から呼び出す必要があるとは思いません。

Composerマネージャーやハッキングコアを使用せずに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
メインのcomposerファイルを編集することが正しい方法です。
Eyal

composerがすべての依存関係(コアを含む)を管理できるようにすると、問題は解消されます。packagist.org/packages/drupal/core
Eyal

これは、別の質問のために書いた作曲家ファイルの例です。drupal.stackexchange.com
Eyal

返信@Eyalをありがとう。したがって、composer.jsonファイルを介してすべてのcontribモジュールを管理することが新しい推奨される方法であり、モジュールをダウンロードしてインストールするためのDrushは置き換えられていますか?もちろん、composerはネストされた依存関係を自動的に解決し、実際に依存関係もダウンロードします。
Neograph734 2016年

回答:


6

最大の柔軟性を実現するdrupal-scaffoldを使用する新しい方法

Drupal 8.4.0以降で、drush> 9.0.0を使用している場合、drush makeは非推奨になりました。以下のdrupal.orgのドキュメントリンクで詳しく説明されているように、フルコンポーザーのワークフローを使用する必要があります。これらのリンクはcomposerプロジェクトの使用をお勧めしますが、これはすべての人のWebサーバー設定では機能しない可能性があります。詳細な説明のために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を設定して、モジュールを必要な場所にインストールします(ベンダー/または他の開発者が選択したディレクトリではありません)。「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スクリプトを1回(または必要に応じてビルドサーバーで)実行します。

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モジュールを直接要求できます。DrupalプロジェクトでのComposerの使用、Drupal.org介してDrupalパッケージをインストールするためのComposerの使用に関するドキュメントは、drupal.orgのpackagistを利用するように更新されました。私はそれが配備シナリオですでにうまく機能しているのを見つけました。

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バージョンのタグと、semverを使用するdrupal.orgパッケージのURLを追加しました。そのために、私はhttps://packagist.drupal-composer.orgでより安定したpackagistを使用するように切り替える必要がありましたこれは、従来のDrupalバージョンのタグをまだサポートしています。

また、ビルドサーバーまたはマシンは、composerの更新(または要求)を実行するために膨大な量のメモリを必要とすることに注意してください。これは、ビルドプロセスで同様の開発マシンでcomposerの更新を実行できないすべてのシナリオで必要です。

アップデート2016.09.23

2018.03.30を更新

  • 賛成票に気づきました。これはかなり古いので、drush makeは(悲しいことに)しばらく非推奨となっているため、より最近の開発について明確にし、composerを使用してサイトを直接設定することにしました。

1
私はまだdrushを使用してモジュールをダウンロードおよびインストールすることに慣れていますが、それは完全にcomposerに置き換えられますか?
Neograph734 2016年

これがdrupalciが現在行っている方法ですが、その前に、マージプラグインを直接使用することができました。drupalci用に私が書いたパッチは、最初はdrupal.org/files/issues/2597778-composer-contrib-18.patchでした。これはコミットされましたが、packagistを使用してcomposer iircからすべてを実行するために簡素化されたため、コードベースには含まれなくなりました。TravisCIで次のことも行います:cgit.drupalcode.org/xero/tree/.travis.yml#n40。それはあなたのワークフローに依存します。
mradcliffe 2016年

Composerを使用したサードパーティライブラリのAsset Packagistについての説明を追加する価値があるかもしれません。この方法論は多くのDrupalディストリビューションで採用されており、いくつかのcontribモジュールでも使用されています。私はちょうどこのソリューションのofficializeするためにいくつかのマニュアルを参照して貢献してきましたdrupal.org/docs/develop/using-composer/...drupal.org/docs/develop/using-composer/...を
ジェームズ・ウィルソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.