web-dev-qa-db-ja.com

Composer Managerを使用せずにカスタムモジュールにサードパーティライブラリを含めるにはどうすればよいですか?

Drupal 8.でカスタムTwitter Pullモジュールを作成しようとしています。8- https://github.com/abraham/twitteroauth を含めたいと思います。

ルートcomposer.jsonファイルのcomposerを介して追加するか、Composer Managerを使用してcomposer.jsonを作成することにより、ファイルを自分のモジュールのルートに置くので、この質問のために、他にどのようにライブラリを含めて使用することができますか?

カスタムモジュールの.ymlファイルに依存関係を追加できますか?
カスタムモジュールでこのライブラリの名前空間/オートロードをどのように処理しますか?

2
Greg

一般:Composerマージプラグイン

Drupalのメインcomposer.jsonでは、 Composer Merge Plugin を使用して、特定のディレクトリでcomposer.jsonファイルをスキャンし、それらをメインcomposer.jsonにマージできます。

次に、サードパーティライブラリを必要とするカスタムモジュールにcomposer.jsonを含めます。ルートcomposer.jsonでは、マージプラグインが必要であり、extraセクションの下で特定のディレクトリを含めるように構成します。

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "web/modules/custom/*/composer.json"
            ]
        }
    }
}

オプション:Composer Custom Type Installer

カスタムモジュールのサードパーティライブラリがGitHubで利用可能であり、ライブラリをダウンロードする場所を定義する場合(特にすべてのフロントエンドライブラリに非常に役立つ)、 Composerカスタムタイプインストーラーを使用できます。 メインcomposer.json内。

次に、カスタムモジュールのcomposer.jsonの[repositories]セクションにサードパーティのライブラリを必要とし、typeセクションで事前に構成したパッケージを[extraに割り当てます。メインcomposer.jsonのlibをダウンロードする場所を定義します。

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "select2",
            "version": "4.0.3",
            "type": "theme-library",
            "source": {
                "url": "https://github.com/select2/select2.git",
                "type": "git",
                "reference": "tags/4.0.3"
            }
        }
    }
]

そして、メインのcomposer.jsonの対応するextraセクション:

"extra": {
    "custom-installer": {
        "theme-library": "web/themes/custom/MYTHEME/libs/{$name}"
    }
}

もちろん、簡単にするために、メインcomposer-merge-pluginからすべて(custom-installerおよびcomposer.jsonおよびGitHubリポジトリを必要とする)を実行することもできます。私はそれをお勧めします。

その場合は、composer require PACKAGENAMEファイルにlibを手動で組み込んだ後、少なくとも1回composer require select2(この例ではcomposer.json)を実行します。


最後に重要なことですが、ライブラリをMYMODULE.libraries.ymlおよびhook_page_attachmentsにバインドすることを忘れないでください(後でMYMODULE.moduleから呼び出されます)。 スタイルシート(CSS)とJavaScript(JS)をDrupal 8モジュール に追加するを参照してください。

1
leymannx