2016-01-11 11 views
15

हाल ही में, मैंने एक पैकेज LaravelFacebookSdk स्थापित किया है।लार्वेल में पैकेज को सही तरीके से कैसे इंस्टॉल करें?


मैं अपने composer.json तब

"sammyk/laravel-facebook-sdk": "~3.0" 

जोड़कर अद्यतन को स्थापित, मैं चलाने composer update


सेवा प्रदाता

मेरे /config/app.php में, मैं प्रदाता सरणी में LaravelFacebookSdkServiceProvider जोड़ता हूं।

'providers' => [ 
    SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class, 
    ]; 

सब कुछ अच्छा काम करता है। फिर, मैंने इसे अपने भंडार में धक्का दिया।


यहां समस्या आती है!

दूसरा डेवलपर में आ रहा है एक git pull और चलाने composer update

किया वह एक त्रुटि

SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class, 

undefine है मिल जाएगा। क्योंकि, मैंने घोषणा की कि मेरे प्रदाता सरणी के तहत मेरे /config/app.php में।

उसे पर जाना है उस पंक्ति को टिप्पणी करें, और पहले composer update चलाएं। सबकुछ सफलतापूर्वक स्थापित करने के बाद, फिर वापस जाएं और असम्बद्ध उस लाइन को दोबारा वापस करें।

क्या अन्य डेवलपर को हर बार ऐसा करना होगा, हमने एक नया पैकेज स्थापित किया है?

क्या मुझे यहां कुछ याद आ रही है?

कृपया सलाह दें कि मैंने कुछ गलत किया है या नहीं।

+1

उसे लाइन को अपूर्ण करने की आवश्यकता नहीं है, लेकिन जब भी आप कोई नया पैकेज जोड़ते हैं तो उसे संगीतकार अद्यतन चलाने की आवश्यकता होगी। – aynber

+0

जब वह संगीतकार अद्यतन चलाता है, तो उसे त्रुटि मिल गई। – ihue

+1

हां.मुझे विश्वास है कि हर कोई क्या करता है। टिप्पणी, फिर असंतोष अद्यतन करें। – Arunu

उत्तर

10

समस्या यह है कि php artisan clear-compiled कमांड को composer.json फ़ाइल में अद्यतन प्रक्रिया से पहले चलाने के लिए कॉन्फ़िगर किया जा रहा है। और चूंकि artisan लैरवेल ऐप का एक अभिन्न हिस्सा है, इसलिए ऐप कोड में कुछ गड़बड़ होने पर यह शिकायत करेगा। चूंकि आपके पास उस वर्ग का संदर्भ है जो अभी तक मौजूद नहीं है, तो यह RuntimeException थूक जाएगा। आप pre-update-cmd सूची से post-update-cmd सूची में composer.json में उस आदेश को स्थानांतरित करके इसे ठीक कर सकते हैं।

तो यह बदलने के लिए:

"scripts": { 
    ... 
    "pre-update-cmd": [ 
     "php artisan clear-compiled" 
    ], 
    "post-update-cmd": [ 
     "php artisan optimize" 
    ] 
}, 
इस के लिए

:

"scripts": { 
    ... 
    "pre-update-cmd": [ 
    ], 
    "post-update-cmd": [ 
     "php artisan clear-compiled", 
     "php artisan optimize" 
    ] 
}, 

अब clear-compiled आदेश, अद्यतन प्रक्रिया के बाद चलाया जाएगा जब संदर्भित LaravelFacebookSdkServiceProvider वर्ग, मौजूद है तो कोई और अधिक त्रुटियों।

+0

@ihue Bogdan इस मुद्दे के बारे में सही है, लेकिन मैं आपकी composer.json फ़ाइल को बदलने की बजाय अनुशंसा करता हूं कि आपको अपनी app.php फ़ाइल को अपडेट करने से पहले संगीतकार इंस्टॉल (या अपडेट) चलाएं। – jfadich

+0

@jfadich पैकेज इसे 'composer.json' और 'app.php' में जोड़कर स्थापित किया गया है, फिर इसे एक गिट सर्वर पर धक्का दिया जाता है। फिर एक और डेवलपर उस कोड को खींच देगा लेकिन लाइब्रेरी को 'विक्रेता' पर स्थापित करने के लिए 'संगीतकार अद्यतन' चलाने की आवश्यकता होगी, हालांकि इस बिंदु पर 'app.php' कॉन्फ़िगरेशन पहले से ही मौजूद है, इसलिए आप जो सुझाव दे रहे हैं केवल काम करेगा डेवलपर के लिए जो प्रारंभ में पैकेज स्थापित करता है। नए कोड को खींचने वाले अन्य सभी देवताओं में '$ प्रदाता' सरणी अपडेट की जाएगी लेकिन कोई लाइब्रेरी कोड नहीं होगा। – Bogdan

+1

@Bogdan अन्य डेवलपर्स को 'संगीतकार अद्यतन' नहीं चलाना चाहिए। उन्हें 'संगीतकार इंस्टॉल' चलाना चाहिए। संगीतकार अद्यतन सभी संकुलों के माध्यम से जाएगा और अपडेट करेगा जो आप चाहते हैं कि जब आप रेपो – jfadich

4

composer update चलाने के बजाय composer install चलाएं। आपकी जेसन फ़ाइल में कमांड बदलने की जरूरत नहीं है।

जब आप composer update चलाते हैं तो यह आपके सभी संकुलों के माध्यम से जाएगा और आपके composer.json के आधार पर सबसे हालिया मामूली संस्करण में अपडेट होगा, फिर composer.lock अपडेट करें। यह वही नहीं है जो आप चाहते हैं।

जब आप composer install चलाते हैं तो यह सुनिश्चित करेगा कि आपके जेसन फ़ाइल में सबकुछ इंस्टॉल हो गया है, जिसमें आपने अभी भी जोड़े गए पैकेज शामिल हैं। यह वही है जो आप खोज रहे हैं।

संबंधित मुद्दे