我正在開發一個包 - myvendor/mylib
- 我打算使用Composer分發,可能是通過Packagist。這個軟件包包含了一個命令行PHP腳本bin/console.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
腳本。原則上,控制檯腳本無法知道他相對於該自動裝入器腳本所在的位置。
作曲家是否提供了一些環境變量 - 可通過控制檯腳本訪問 - 允許腳本找到正確的vendor/autoloader.php
腳本?
BTW:我知道Composer CLI environment variable,所以我想我可以要求導入項目 - mymain
- 定義(並導出)var COMPOSER_VENDOR_DIR
。然後我的控制檯腳本可以使用它來查找項目的自動加載器。但是,這似乎是潛在的問題:
我們要設定只適用於這個項目,而是一個殼VAR(和出口)將適用於從shell會話訪問的所有項目。似乎放肆我的小依賴 -
myvendor/mylib
- 強加在一個導入項目。原則上,依賴本身 -
myvendor/mylib
- 應該能夠找到他需要的東西。似乎不應該對進口商承擔責任。
WDYT?提前致謝。想法歡迎。
你不需要真的迭代,你可以看看兩個dir,因爲它匹配// –
Seldaek
@Seldaek:對,我終於理解了你的來自[jsonlint]的示例(https:// github.com/Seldaek/jsonlint/blob/master/bin/jsonlint)並以此方式實施。謝謝mucho! –
似乎人們仍然有這個問題(我!) 在這裏找到了答案:http://stackoverflow.com/questions/35271282/how-can-i-provide-a-script-for-php-cli-via -composer-AS-獨立和-AS-依賴新生 – VladFr