web-dev-qa-db-ja.com

Guzzleをライブラリとしてライブラリに含めるにはどうすればよいですか?

私は Open Atrium 2 に取り組んでおり、その上にいくつかの統合機能を構築できるように、初期インストールに Guzzle を含めたいと思います。

通常、ライブラリを含めることは、drush makeファイルにライブラリを追加することを意味しますが、Guzzleは次の理由によりさらに複雑です。

  1. いくつかの依存関係があります。
  2. 直接ダウンロードするのではなく、ComposerまたはPearによってインストールされることを意図しています。
  3. Drupal.orgのパッケージングホワイトリスト にはありませんが、ライセンスが競合しないため、追加するように要求できます。

どうすればこれを実現できますか?すべての依存関係を含む事前にバンドルされ、すぐに使用できるパッケージはどこかにあります。その場合、Drupal.orgのホワイトリストに登録することを要求してそれを使用できますか?または、sites/all/librariesに配置できる一連のファイルを含めるだけでなく、Guzzleトリッカーをインストールしていますか?

何か案は?

2
Mike Crittenden

私はcomposer私のマシンでシステム全体を無効にし、メイクファイルを作成し、それが正常に動作しますDrupal 7コアと次のモジュール:composer、composer_autoload&guzzle。

これは platform.make の内容です

$Id$

; API

api = 2

; Core

core = 7.x

; Drupal project.

projects[drupal][type] = core  
projects[drupal][version] = 7.x  
projects[drupal][download][type] = git  
projects[drupal][download][branch] = 7.x  

; Modules

projects[composer] = 1.x-dev  
projects[] = composer_autoload  
projects[] = guzzle
1
jmolivas

Composer Manager を使用すると、PHP Composerを介して管理されるライブラリとその依存関係をプロジェクトごとにインストールできます。

したがって(モジュールの README.md のとおり):

モジュールにcomposer.jsonファイルが含まれている場合、ルートディレクトリでcomposer installを実行すると、すべての要件と依存関係が独自のオートローダーを使用してvendor/ディレクトリにダウンロードされます。

Guzzleチャレンジは README.md で説明されています:

課題を強調するために、module_aには"guzzle/http": "3.7.*"が必要であり、module_bには"guzzle/service": ">=3.7.0"が必要であるとします。この投稿の時点で、各モジュールのディレクトリでcomposer installを実行すると、guzzle/httpのバージョン3.7.4のmodule_avendor/ディレクトリにインストールされ、バージョン3.8.1のguzzle/servicemodule_bvendor/ディレクトリにインストールしています。

guzzle/serviceguzzle/httpに依存しているため、guzzle/httpが重複してインストールされています。さらに、インストールごとに異なるバージョンのguzzle/httpコンポーネントを使用します(module_aの場合は3.7.4、module_bの場合は3.8.1)。 module_aのオートローダーが最初に登録されている場合、\Guzzle\Service\Clientのバージョン3.8.1が\Guzzle\Http\Clientのバージョン3.7.4を拡張している状況になります。

Composer Manager's Solutionを使用することにより、有効な各モジュールのルートディレクトリですべてのcomposer.jsonファイルを見つけ、それらを統合されたcomposer.jsonファイルに正常にマージします(これにより、コードの重複を防ぎます)およびバージョンの不一致)。

上記の使用例では、Composerはguzzle/httpguzzle/serviceの両方をバージョン3.7.4に解決します。これは、より一貫性があり、信頼できる環境です。


したがって、質問に答えるために:はい、それをsites/all/vendorのDrupalインストールに含めることができます。

  • sites/all/vendor/composer
  • sites/all/vendor/guzzlehttp
1
kenorb