私はパッケージを開発しています - myvendor/mylib
- Composer を使って、おそらく Packagist 経由で配布する予定です。このパッケージには、特に、パッケージをインポートbin/console.php
するプロジェクトで利用できるようにしたいコマンドライン PHP スクリプトが含まれています。myvendor/mymain
mylib
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
。その後、私のコンソール スクリプトはそれを使用して、プロジェクトのオートローダーを見つけることができます。しかし、それは潜在的に問題があるようです:
設定をこのプロジェクトにのみ適用したいのですが、シェル変数 (およびエクスポート) は、そのシェル セッションからアクセスされるすべてのプロジェクトに適用されます。私の小さな依存関係は思いがけないようです -
myvendor/mylib
- 輸入プロジェクトにそれを課すために。原則として、依存関係自体 -
myvendor/mylib
- 必要なものを見つけることができるはずです。輸入者に責任を負わせるのは適切ではないようです。
WDYT? 前もって感謝します。アイデア歓迎。