संगीतकार: मैं पुराने को अपडेट किए बिना एक और निर्भरता कैसे स्थापित कर सकता हूं?


196

मेरे पास कुछ आश्रितों के साथ एक परियोजना है और मैं एक और स्थापित करना चाहूंगा, लेकिन मैं दूसरों को उसी तरह रखना चाहूंगा जैसे वे हैं। इसलिए मैंने संपादित किया है composer.json, लेकिन अगर मैं चलाता composer installहूं, तो मुझे निम्नलिखित आउटपुट मिलते हैं:

Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.

सबसे पहले, मेरे पास mcrypt स्थापित है, इसलिए मुझे नहीं पता कि इसके बारे में शिकायत क्यों है।

तो, मैं इस नई निर्भरता को कैसे स्थापित कर सकता हूं?

मेरे संगीतकार। Json:

{
    "require": {

        "opauth/opauth": "*",
        "opauth/facebook": "*",
        "opauth/google": "*",
        "opauth/twitter": "*",

        "imagine/Imagine": "dev-develop",

        "laravel/framework": "4.*",
        "loic-sharma/profiler": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/libraries",
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/tests/TestCase.php"
        ]
    },
    "minimum-stability": "dev"
}

1
Mcrypt चेतावनी कई php इंस्टॉल से हो सकती है ... mcrypt एक्सटेंशन वाली php आपके php-cli जैसी ही इन्स्टाल नहीं हो सकती है
Matthemattics

जवाबों:


293

एक नया पैकेज और केवल यह स्थापित करने के लिए, आपके पास दो विकल्प हैं:

  1. requireकमांड का उपयोग करना , बस चलाना:

    composer require new/package
    

    संगीतकार पैकेज का उपयोग करने, और इसे जोड़ने के लिए सबसे अच्छा संस्करण बाधा का अनुमान लगाएगा composer.lock

    आप रन करके एक स्पष्ट संस्करण बाधा भी निर्दिष्ट कर सकते हैं:

    composer require new/package ~2.5
    

-या-

  1. updateकमांड का उपयोग करते हुए , नया पैकेज मैन्युअल रूप से जोड़ें composer.json, फिर चलाएं:

    composer update new/package
    

यदि कंपोज़र शिकायत करता है, तो "आपकी आवश्यकताओं को संकुल के एक स्थापित सेट पर हल नहीं किया जा सकता है।", आप ध्वज को पारित करने से हल कर सकते हैं। --with-dependencies । यह उस पैकेज की सभी निर्भरता को श्वेतसूची में स्थापित करेगा जिसे आप स्थापित करने / अपडेट करने की कोशिश कर रहे हैं (लेकिन आपकी अन्य निर्भरताओं में से कोई भी नहीं)।

Laravel और mcrypt के साथ प्रश्न पूछने वाले के मुद्दों के बारे में: जांचें कि यह आपके CLI php.ini में ठीक से सक्षम है। यदि php -mmcrypt की सूची नहीं है तो यह गायब है।

महत्वपूर्ण: का उपयोग करते new/packageसमय निर्दिष्ट करने के लिए मत भूलना composer update! उस तर्क को स्वीकार करने से सभी निर्भरताएं, साथ ही composer.lockअद्यतन होने का कारण होगा ।


3
मुझे संदेश "पैकेज [...] अपडेट के लिए सूचीबद्ध है स्थापित नहीं है। उपेक्षा।"
गेरी

11
यह मेरे लिए काम नहीं करता है। मुझे बताया गया है कि अद्यतन के लिए सूचीबद्ध 'पैकेज "x / y" स्थापित नहीं है। नजरअंदाज करना। "और फिर यह सब कुछ अपडेट करने के बारे में चला जाता है। इसलिए यह नया पैकेज नहीं चाहता है जो मैं चाहता हूं और यह सब कुछ अपडेट करता है, जो कि मैं चाहता हूं कि इसके विपरीत है।
कांपना

3
यह सिर्फ काम नहीं करता है। "आपकी आवश्यकताओं को संकुल के संस्थापित सेट में हल नहीं किया जा सकता है।" (और कुछ पुराने पैकेजों के बारे में पाठ, जो कि मैं पूछता हूं) से संबंधित नहीं है। जब मैं पूछता हूं कि मैं सिर्फ एक पैकेज अपडेट करता हूं।
OZ_

@tremby यहाँ ठीक काम करता है। शायद आप "new/package" : "*",कंपोज़र.जॉन "require"अनुभाग में जोड़ना भूल गए ?
पर्थका

@OZ_ भले ही केवल एक निर्भरता स्थापित की जानी है, फिर भी यह सुनिश्चित करने के लिए पहले समाधान करने की आवश्यकता है कि यह आपके अन्य निर्भरता के साथ संघर्ष न करे।
पर्ट्का

30

वास्तव में, सही समाधान है:

composer require vendor/package

संगीतकार के लिए CLI प्रलेखन से लिया गया :

requireआदेश के लिए नए पैकेज कहते हैं composer.jsonवर्तमान निर्देशिका से फ़ाइल।

php composer.phar require

आवश्यकताओं को जोड़ने / बदलने के बाद, संशोधित आवश्यकताओं को स्थापित या अद्यतन किया जाएगा।

यदि आप संवादात्मक रूप से आवश्यकताओं का चयन नहीं करना चाहते हैं, तो आप उन्हें केवल कमांड में पास कर सकते हैं।

php composer.phar require vendor/package:2.* vendor/package2:dev-master

हालांकि यह सच है कि composer updateकंपोज़र.जॉन में पाए जाने वाले नए पैकेजों को स्थापित करता है, यह कंपोज़र.जोन में पाए गए किसी भी फ़ज़ी लॉजिक ( >या *कॉलन के बाद के वर्ण) के अनुसार कंपोज़र.लॉक फ़ाइल और किसी भी इंस्टॉल्ड पैकेज को अपडेट करेगा ! इसका उपयोग करने से बचा जा सकता है composer update vendor/package, लेकिन मैं इसकी आदत बनाने की सलाह नहीं दूंगा, क्योंकि आप संभावित रूप से टूटी हुई परियोजना से दूर एक तर्क भूल गए हैं ...

composer require vendor/packageनई निर्भरता जोड़ने के लिए चीजों को सेंस और स्टिक रखें ! 😉


लेकिन composer requirecomposer.lock फ़ाइल को अद्यतन करने का उपयोग करेगा ?
फिल

2

मेरा उपयोग मामला अधिक सरल है, और आपके शीर्षक को नहीं बल्कि आपके आगे के विवरण को फिट करता है।

यही है, मैं एक नया पैकेज स्थापित करना चाहता हूं जो composer.jsonअन्य सभी पैकेजों को अपडेट किए बिना अभी तक मेरे में नहीं है।

यहाँ समाधान है composer require x/y


1

मेरे मामले में, मेरे पास एक रेपो था:

  • आवश्यकताएँ ए, बी, सी, डी इन .json
  • लेकिन केवल ए, बी, सी .lock

इस बीच, ए, बी, सी के पास लॉक उत्पन्न होने पर सम्मान के साथ नए संस्करण थे।

किसी कारण के लिए, मैंने "विक्रेताओं" को हटा दिया composer installऔर संदेश के साथ ए और विफल करना चाहता था :

Warning: The lock file is not up to date with the latest changes in composer.json.
You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

मैंने सेलडेक से समाधान चलाने की कोशिश की, composer update vendorD/libraryDलेकिन संगीतकार ने अधिक चीजों को अपडेट करने के लिए जोर दिया, इसलिए .lockमेरे मेरे टूल को देखने में बहुत बदलाव आए।

इसका उपयोग मैंने किया था:

  1. सभी vendorsडायर को हटा दें ।
  2. अस्थायी रूप से आवश्यकता VendorD/LibraryDको हटा दें .json
  3. दौड़ो composer install
  4. फिर फ़ाइल को हटा दें .jsonऔर इसे फिर से रेपो से हटा दें (फ़ाइल को फिर से जोड़ने के बराबर है, लेकिन संभावित व्हाट्सएप परिवर्तन से बचें)।
  5. फिर सेलडेक का घोल चलाएं composer update vendorD/libraryD

इसने पुस्तकालय को स्थापित किया, लेकिन इसके अलावा, gitमुझे यह दिखा दिया कि .lockकेवल अन्य चीजों को संपादित किए बिना नई चीजों को जोड़ा गया था।

(सूचक के लिए Thnx Seldaek;))


यह एक ओवरकिल है। बस लॉक फाइल को डिलीट करें और कंपोजर इंस्टॉल करें। यह काम करता है
astroanu

6
यह गैर-समर्थक वातावरण के लिए सही रहता है, जहाँ आप खुशी से निर्भरता का पुनर्निर्माण कर सकते हैं और यदि कुछ टूट जाता है तो आप इसे ठीक कर सकते हैं। लेकिन अगर आपके लिए, सर्वर विफल होने का मतलब है कि आप प्रति घंटे $ 10.000 ढीले हैं, तो आपको संदेह नहीं है कि composer.lockकभी भी खुशी से हटा दिया जाना चाहिए और पुनर्निर्माण नहीं किया जाना चाहिए। .lockहै ... ताला लगाने के लिए !! ; डी - अन्यथा लॉक फ़ाइल बेकार हो जाएगी और आप इसे शुरू नहीं करेंगे या यह बिल्कुल भी मौजूद नहीं होगा। यदि आप एक गुणवत्ता-उन्मुख कंपनी में चलते हैं और 1.000 निर्भरता के साथ ताला बनाते हैं, तो उनमें से सभी बदल जाएंगे, और क्यूए लोग आपको हाहाहा मारेंगे।
ज़ावी मोंटेरो

2
अरे @astroanu सिर्फ यह स्पष्ट करने के लिए कि यदि आपने पहले की तारीख में एक निर्भरता स्थापित की है और इसकी कुछ निर्भरता देव गुरु के नवीनतम संस्करण को पकड़ रही है, तो कंपोजर को हटाने और बस स्थापित करने में महत्वपूर्ण मुद्दे हो सकते हैं। यदि आपको निर्भरता शुरू करने के प्रभाव को सत्यापित करने का अवसर नहीं मिला है, तो अप्रत्याशित परिणामों की संभावना है और संभवतः उपयोगकर्ताओं के लिए एक खराब अनुभव पैदा कर सकता है।
dkcwd

बेशक, लॉक फाइल को डिलीट करना और इंस्टॉल फाइल को डिलीट किए बिना भी इंस्टॉल / अपडेट या रनिंग अपडेट चलाना एप्लिकेशन की स्थिरता को प्रभावित करेगा। संगीतकार अद्यतन केवल देव परिवेश पर चलाया जाना चाहिए। उत्पादन पर हमेशा कंपोज़र इंस्टाल का उपयोग करें क्योंकि लॉक फ़ाइल में जो कुछ भी सेव होता है उसके विरुद्ध प्रोडक्शन बिल्ड का परीक्षण किया जाता है।
एस्ट्रोनु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.