web-dev-qa-db-ja.com

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

私は drupal-composerを使用したカスタムモジュールの依存関係 を見つけました Composer Managerを使用せずにカスタムモジュールにサードパーティライブラリを含めるにはどうすればよいですか?contribモジュールの管理方法composer drupal 8)への依存関係 これは私の質問に関連していますが、もう見えませんDrupal 8.1以降 Composer manager の廃止)から適用します。

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

composer managerに反対する他のソリューションは、コアcomposer.jsonファイルを変更しすぎると、コアハッキングが多すぎるように感じ、おそらくDrupal coreのDrush更新ごとに壊れます(?).

より具体的には、 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ライブラリがダウンロード?

Drupal rootからcomposer updateを実行するだけで、多くのDrupal依存関係が更新されますが、次の場所にあるcomposer.jsonファイルは含まれません。また、依存関係のあるすべてのモジュール内からcomposer installを呼び出す必要があるとは思いません。

Drupal composer managerおよび/またはハッキングコアを使用せずにモジュールの依存関係を認識させるにはどうすればよいですか?

更新:

コアで使用されるコンポーザーマージプラグイン はワイルドカードパスをサポートしているようです:

{
    "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:

これをサポートしない理由は この問題 でカバーされています(これもしばらくの間静かでした)。

9
Neograph734

最大の柔軟性を実現する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をそのまま使用して自動的に追加する方法がないため、設定に基づいて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が機能するには、スクリプトとプラグインを使用できる必要があります。

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モジュールを直接要求できます。 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-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が追加されました。そのために、従来のDrupalバージョンのタグを引き続きサポートする https://packagist.drupal-composer.org で、より安定したpackagistを使用するように切り替える必要がありました。

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

アップデート2016.09.23

  • Composerを使用してDrupal.org からDrupalパッケージをインストールするためのリンクを追加しました。
  • Drush makeでの使用方法について、開発セクションに追加しました。

2018.03.30を更新

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