कंपोज़र.जॉन में आवश्यकता और आवश्यकता-देव वर्गों के बीच क्या अंतर है?


99

मैं संगीतकार का उपयोग करना शुरू कर रहा हूं, मैं इसके बारे में बहुत कम जानता हूं और वेब अनुप्रयोग विकास के साथ थोड़ा अनुभव है।

मैं सिर्फ नेटटट्स + ट्यूटोरियल के माध्यम से चलता हूं, इसलिए मेरे पास संगीतकार के बारे में बुनियादी सवाल है।

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}
  1. जो कुछ भी "require-dev"भाग में दिखाई देता है , उसे केवल डाउनलोड और इंस्टॉल किया जाएगा composer install --dev?
  2. मैंने संगीतकार के कुछ दस्तावेज़ पढ़े लेकिन अभी भी यह नहीं समझ पाया कि हमारे पास क्या कारण है "require-dev"? क्या यह इसलिए है क्योंकि हम पैकेज के विशिष्ट संस्करण को हमेशा नवीनतम स्थिर संस्करण प्राप्त करना चाहते हैं?

जवाबों:


115

विभिन्न वातावरण

आमतौर पर, सॉफ्टवेयर विभिन्न वातावरणों में चलेगा:

  • development
  • testing
  • staging
  • production

विभिन्न वातावरण में विभिन्न निर्भरताएँ

जो निर्भरताएँ requireअनुभाग में घोषित की composer.jsonजाती हैं , वे आमतौर पर निर्भरताएँ होती हैं, जो किसी अनुप्रयोग या पैकेज को चलाने के लिए आवश्यक होती हैं

  • staging
  • production

वातावरण, जबकि require-devअनुभाग में घोषित निर्भरताएं आम तौर पर निर्भरताएं होती हैं जिनकी आवश्यकता होती है

  • developing
  • testing

वातावरण।

उदाहरण के लिए, वास्तव में किसी एप्लिकेशन को चलाने के लिए उपयोग किए जाने वाले पैकेजों के अलावा, सॉफ़्टवेयर को विकसित करने के लिए पैकेजों की आवश्यकता हो सकती है, जैसे:

  • friendsofphp/php-cs-fixer (स्टाइल मुद्दों को पहचानने और ठीक करने के लिए)
  • squizlabs/php_codesniffer (स्टाइल मुद्दों को पहचानने और ठीक करने के लिए)
  • phpunit/phpunit (परीक्षणों का उपयोग करके विकास को चलाने के लिए)
  • आदि।

तैनाती

अब, developmentऔर testingवातावरण में, आप आमतौर पर दौड़ेंगे

$ composer install

दोनों productionऔर developmentनिर्भरता को स्थापित करने के लिए ।

हालाँकि, stagingऔर productionवातावरण में, आप केवल निर्भरताएँ स्थापित करना चाहते हैं, जो अनुप्रयोग को चलाने के लिए आवश्यक हैं, और परिनियोजन प्रक्रिया के भाग के रूप में, आप आमतौर पर चलाते हैं

$ composer install --no-dev

केवल productionनिर्भरता स्थापित करने के लिए ।

शब्दार्थ

दूसरे शब्दों में, वर्गों

  • require
  • require-dev

इंगित करें composerकि आपके द्वारा चलाए जाने पर कौन से पैकेज इंस्टॉल किए जाने चाहिए

$ composer install

या

$ composer install --no-dev

बस इतना ही।

नोट आपके अनुप्रयोग या पैकेज पर निर्भर पैकेजों की विकास निर्भरता कभी भी स्थापित नहीं होगी

संदर्भ के लिए, देखें:


क्या मैं सही ढंग से समझता हूं, कि vendorएफ़टीपी के माध्यम से पूरे फ़ोल्डर को अपलोड करके अगर मैं "तैनात" करता हूं तो यह बिल्कुल भी मायने नहीं रखता है ?
पायलट

2
@ पिलाट आप कर सकते हैं, लेकिन इसके साथ स्थापित करना सुनिश्चित करें —no-dev। साथ ही, एफ़टीपी शायद काफी धीमा होगा।
लोकलिन्ज

कैसे निर्भरता के बारे में जो आपको अपने आवेदन को बनाने की आवश्यकता है, केवल? इसलिए, एक निर्माण और तैनाती पाइपलाइन में, मैं उन्हें निर्माण के लिए स्थापित करना और फिर उन्हें तैनात करने से पहले फिर से निकालना चाहूंगा। उदाहरण के लिए, या सीएसएस में लेस / पास मोड़ के लिए। आप वह कैसे करेंगें?
रिचर्ड कीफर

1
@RichardKiefer कुछ लोग phar.io का उपयोग करते हैं , अन्य PHAR में जांच करते हैं, फिर भी अन्य लोग Docker छवियों का उपयोग करते हैं, और कुछ लोग एक अलग का उपयोग भी करते composer.jsonहैं - उदाहरण के लिए देखें github.com/FriendsOfPHP/PHP/CS.Fixer/tree/2.16/dev-tools
लोकहिन्ज

तो क्या आप केवल कंपोज़र को ही दोषी मानेंगे। क्या यह सब कुछ करने के लिए और अधिक समझ में नहीं आता है, और सिर्फ उत्पादन के लिए गिट से मास्टर शाखा को खींचना है?
mbomb007

61
  1. संगीतकार मैनुअल के अनुसार :

    आवश्यकता-देव (केवल जड़)

    इस पैकेज को विकसित करने, या परीक्षण चलाने आदि के लिए आवश्यक सूचियों को सूचीबद्ध करता है। रूट पैकेज की आवश्यकताओं को डिफ़ॉल्ट रूप से स्थापित किया जाता है। दोनों installया updateसमर्थन --no-devविकल्प है कि रोकता है स्थापित किए जाने से निर्भरता डेव।

    इसलिए रनिंग composer installविकास निर्भरता को भी डाउनलोड करेगा।

  2. कारण वास्तव में बहुत आसान है। जब आप एक विशिष्ट पुस्तकालय में योगदान दे रहे हैं तो आप परीक्षण सूट या अन्य विकसित उपकरण (जैसे सिम्फनी) चलाना चाह सकते हैं। लेकिन यदि आप इस लाइब्रेरी को किसी प्रोजेक्ट में स्थापित करते हैं, तो उन विकास निर्भरताओं की आवश्यकता नहीं हो सकती है: प्रत्येक प्रोजेक्ट को परीक्षण धावक की आवश्यकता नहीं होती है।


19

संगीतकार साइट से (यह पर्याप्त स्पष्ट है)

# की आवश्यकता होती है

इस पैकेज के लिए आवश्यक पैकेज सूची देता है। जब तक उन आवश्यकताओं को पूरा नहीं किया जा सकता तब तक पैकेज स्थापित नहीं किया जाएगा।

आवश्यकता-देव (मूल-केवल) #

इस पैकेज को विकसित करने, या परीक्षण चलाने आदि के लिए आवश्यक सूचियों को सूचीबद्ध करता है। रूट पैकेज की आवश्यकताओं को डिफ़ॉल्ट रूप से स्थापित किया जाता है। दोनों स्थापित या अद्यतन -no-dev विकल्प का समर्थन करते हैं जो देव निर्भरता को स्थापित होने से रोकता है।

कम्पोज़र में आवश्यकता-देव का उपयोग करके आप परियोजना के विकास / परीक्षण के लिए निर्भरता की घोषणा कर सकते हैं लेकिन उत्पादन की आवश्यकता नहीं है। जब आप प्रोजेक्ट को अपने उत्पादन सर्वर पर अपलोड करते हैं (git का उपयोग करके) require-devभाग को नजरअंदाज कर दिया जाएगा।

लेखक और इस पोस्ट द्वारा पोस्ट किए गए इस उत्तर को भी देखें।


3
कृपया मुझे समझाएं कि "रास्ता / जनरेटर" क्यों: "देव-गुरु" "आवश्यकता" अनुभाग में है?, मुझे अब उत्पादन में इसकी आवश्यकता नहीं होगी।
कारीगर

1
यह कुल अनुमान है, लेकिन केवल एक चीज जो मैं सोच सकता हूं, वह यह है कि क्योंकि जिस तरह / जनरेटर एक सेवा प्रदाता के रूप में जुड़ जाते हैं, अगर यह उत्पादन के माहौल में गायब है, तो लारवेल काम नहीं करेगा।
डैनियल हॉलैंड्स

2
भाग मूल पैकेज की देव आवश्यकताओं को डिफ़ॉल्ट रूप से स्थापित किया गया है, जिसमें स्पष्ट है कि आवश्यकता-देवता से मिलने वाले चित्र यहां तक ​​कि उत्पादन सर्वर पर भी स्थापित किए गए हैं।
जेमू

3
विचार यह है कि आप उत्पादन पर -no-dev ध्वज का उपयोग करेंगे।
जॉन पैनकोस्ट

2

अनुभाग की आवश्यकता है इस अनुभाग में संकुल / निर्भरताएं हैं जो उत्पादन वातावरण में स्थापित / आवश्यक होने के लिए बेहतर उम्मीदवार हैं।

आवश्यकता-देव अनुभाग: इस खंड में संकुल / निर्भरताएँ हैं, जिनका उपयोग डेवलपर द्वारा उसके कोड का परीक्षण करने के लिए किया जा सकता है (या उसके स्थानीय मशीन पर प्रयोग करने के लिए और वह नहीं चाहता कि ये पैकेज उत्पादन परिवेश पर स्थापित हों)।


1

सामान्य नियम यह है कि आप विकास (देव) वातावरण में केवल आवश्यकता देव अनुभाग से संकुल चाहते हैं , उदाहरण के लिए स्थानीय वातावरण।

में संकुल की आवश्यकता होती है-देव खंड संकुल जो मदद आप अनुप्रयोग डिबग, चलाने के परीक्षण आदि कर रहे हैं

पर मचान और उत्पादन वातावरण आप शायद से केवल संकुल चाहते आवश्यकता अनुभाग।

लेकिन वैसे भी आप कंपोज़र इंस्टाल कर सकते हैं - कोई भी पर्यावरण पर कंपोज़र अपडेट -न-देव और कमांड, केवल आवश्यक सेक्शन से ही पैकेज इंस्टॉल करेगा, न कि आवश्यकता-देव से , लेकिन शायद आप इसे केवल स्टेजिंग और प्रोडक्शन में चलाना चाहते हैं स्थानीय पर वातावरण नहीं।

सैद्धांतिक रूप से आप सभी पैकेजों को अनुभाग की आवश्यकता के लिए रख सकते हैं और कुछ भी नहीं होगा, लेकिन आप निम्न कारणों से उत्पादन वातावरण में पैकेज विकसित नहीं करना चाहते हैं:

  1. गति
  2. कुछ डिबगिंग जानकारी को उजागर करने की क्षमता
  3. आदि

आवश्यकता-देव के लिए कुछ अच्छे उम्मीदवार हैं:

"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"

आप देख सकते हैं कि उपरोक्त पैकेज क्या कर रहे हैं और आप देखेंगे कि आपको उत्पादन पर उनकी आवश्यकता क्यों नहीं है।

यहाँ और देखें: https://getcomposer.org/doc/04-schema.md

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.