के लिए पथ की आवश्यकता है I पैकेज - myvendor/mylib
- मैं पैकेजर के माध्यम से संभवतः संगीतकार का उपयोग करके वितरित करने की योजना बना रहा हूं। इस पैकेज में - अन्य चीजों के साथ - एक कमांडलाइन PHP स्क्रिप्ट bin/console.php
है कि मैं परियोजनाओं के लिए उपलब्ध करना चाहता हूं - myvendor/mymain
कहें - जो mylib
पैकेज आयात करता है।निर्भरता में स्क्रिप्ट कंपोज़र ऑटोलोडर
मुझे पता है कि मैं डिब्बे की एक सरणी के साथ composer.json
में एक config
सेटिंग आयात करने के लिए mylib
पैकेज में निर्दिष्ट कर सकते हैं हूँ:
{
"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
को कंपोज़र से उत्पन्न 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
- परिभाषित वर COMPOSER_VENDOR_DIR
(और निर्यात!)। फिर प्रोजेक्ट के ऑटोलोडर को खोजने के लिए मेरी कंसोल स्क्रिप्ट इसका उपयोग कर सकती है। लेकिन उस कि में संभावित रूप से समस्या लगता है:
हम सेटिंग केवल करने के लिए इस परियोजना लागू करना चाहते हैं, लेकिन एक खोल वर (और एक निर्यात) सभी परियोजनाओं खोल सत्र से पहुँचा पर लागू होगा। एक आयात परियोजना पर लगाए जाने के लिए - मेरी छोटी निर्भरता -
myvendor/mylib
- की प्रस्तुति के बारे में लगता है।सिद्धांत रूप में, निर्भरता स्वयं -
myvendor/mylib
- उसे जो चाहिए उसे ढूंढने में सक्षम होना चाहिए। आयातक पर ऑनस डालने का अधिकार प्रतीत नहीं होता है।
WDYT? अग्रिम में धन्यवाद। विचारों का स्वागत है।
आपको वास्तव में दोहराने की आवश्यकता नहीं है, तो आप केवल दो डीआईआरएस देख सकते हैं क्योंकि/<पैकेज-नाम>/ –
Seldaek
@ सेल्डेक: ठीक है, मैं अंत में [नमूना] से आपका नमूना समझ गया [https: // github.com/Seldaek/jsonlint/blob/master/bin/jsonlint) और इस तरह से लागू किया। बहुत बहुत धन्यवाद! –
लगता है कि लोगों के पास अभी भी समस्याएं हैं (मुझे!) यहां एक उत्तर मिला: http://stackoverflow.com/questions/35271282/how-can-i-provide-a-script-for-php-cli-via -composer के रूप में स्टैंडअलोन और के रूप में-निर्भरता – VladFr