9

私はパッケージを開発しています - myvendor/mylib- Composer を使って、おそらく Packagist 経由で配布する予定です。このパッケージには、特に、パッケージをインポートbin/console.phpするプロジェクトで利用できるようにしたいコマンドライン PHP スクリプトが含まれています。myvendor/mymainmylib

mylibパッケージで、インポートするビンの配列を使用してconfig設定を指定できることを認識しています。composer.json

{
    "name": "myvendor/mylib",
    "config" : {
        "bin" : ["bin/console.php"]
    }
}

プロジェクトがmymainコンポーザーのインストール/更新を行うと、これmylib/bin/console.php次のようにシンボリックリンクmymain/bin/console.phpされmymainます。composer.json

{
    "name": "myvendor/mymain",
    "config": {
        "bin-dir": "scripts"
    }   
}

この場合、コンソール スクリプトは としてシンボリック リンクされscripts/console.phpます。

これは問題なく動作します - ところで、すべてがうまくいきます。;-)

ただし、スクリプトbin/console.php自体には、Composer で生成されvendor/autoloader.phpた . 単独で開発mylibする場合、スクリプトはbin/console.phpに対する自分の位置を知っているvendor/autoloader.phpので、簡単に組み込むことができます。myvendor/mymainしかし、依存関係として別のプロジェクト(この場合は ) にインポートされると、そこにはmymain/vendor/autoloader.phpスクリプトしかありません。原則として、コンソール スクリプトは、そのオートローダー スクリプトに関連して、彼がどこにいるのかを知ることができません。

Composer は、スクリプトが適切なvendor/autoloader.phpスクリプトを見つけることを可能にする環境変数 (コンソール スクリプトからアクセス可能) を提供しますか?

ところで: 私はComposer CLI 環境変数mymainを認識しているので、インポートするプロジェクトが var を定義 (およびエクスポート!) することを要件にすることができると思いますCOMPOSER_VENDOR_DIR。その後、私のコンソール スクリプトはそれを使用して、プロジェクトのオートローダーを見つけることができます。しかし、それは潜在的に問題があるようです:

  1. 設定をこのプロジェクトにのみ適用したいのですが、シェル変数 (およびエクスポート) は、そのシェル セッションからアクセスされるすべてのプロジェクトに適用されます。私の小さな依存関係は思いがけないようです - myvendor/mylib- 輸入プロジェクトにそれを課すために。

  2. 原則として、依存関係自体 - myvendor/mylib- 必要なものを見つけることができるはずです。輸入者に責任を負わせるのは適切ではないようです。

WDYT? 前もって感謝します。アイデア歓迎。

4

1 に答える 1

3

1 つのアプローチ (IRC freenode #composer に関する @igorw との議論から出てきたもので、これは言い換えており、多少拡張しています) は、bin スクリプトconsole.phpがファイルシステムを から始めて__DIR__autoload.php.

于 2012-09-04T03:24:43.273 に答える