2013-07-02 7 views
30

मैं एक संगीतकार शुरुआती हूं और मैं एक परियोजना को दूसरे पर निर्भर करने की कोशिश कर रहा हूं, जबकि दोनों परियोजनाएं केवल मेरी स्थानीय मशीन पर मौजूद हैं।संगीतकार - एक स्थानीय भंडार का उपयोग

composer.json मेरे पुस्तकालय परियोजना (PROJECTA) में है:

{ 
    "name" : "project/util", 
    "type" : "library" 
} 

मैं इस परियोजना के आधार फ़ोल्डर में Git प्रारंभ।

परियोजना में मेरे composer.json पहले एक (ProjectB) पर निर्भर करता है:

{ 
    "repositories": [ 
     { 
      "name" : "util", 
      "type" : "git", 
      "url" : "/d/workspaces/util" 
     } 
    ], 

    "require": { 
     "project/util" : "*" 
    }, 
} 

जब मैं ProjectB से composer install चलाने के लिए, मैं निम्नलिखित त्रुटि मिलती है:

[RuntimeException] 
Failed to clone , could not read packages from it 
fatal: repository '' does not exist 

मैं कुछ मान भंडार के यूआरएल के साथ गलत है, लेकिन मुझे यकीन नहीं है कि वहां और क्या लिखना है।

उत्तर

23

मुझे लगता है कि आपको अभी वाक्यविन्यास गलत मिला है। प्रकार सिर्फ वीसीएस होना चाहिए, और फिर संगीतकार आंकड़े बताते हैं कि यह किस प्रकार का वीसीएस है।

तो अपनी परियोजना बी में, खजाने के लिए प्रवेश किया जाना चाहिए:

"repositories": [ 
    { 
     "type": "vcs", 
     "url" : "/d/workspaces/util" 
    } 
], 

आप नाम के लिए क्या पुस्तकालय /d/workspaces/util में उपलब्ध है की जरूरत नहीं है। संगीतकार उस निर्देशिका में composer.json फ़ाइल को स्कैन करेगा और पता होगा कि वहां कौन सा प्रोजेक्ट नाम उपलब्ध है, और उस निर्देशिका से प्रोजेक्ट का उपयोग पैकेजिस्ट या अन्य रिपॉजिटरी पर सूचीबद्ध संस्करण से वरीयता में करें।

+0

ठीक है, जब मैं वीसीएस में बदलता हूं, तो मुझे यह संदेश मिलता है: [रनटाइम अपवाद] निर्देशिका मौजूद नहीं है:/d/workspaces/use – Banana

+3

एर, संभवतः निर्देशिका मौजूद नहीं है, या पहुंच योग्य नहीं है? – Danack

+2

मुझे लगता है कि निर्देशिका सिर्फ गलत वर्तनी है। क्या आप वाकई इसे '/ d/workspaces/util' के रूप में प्रदान करना है, न कि' d:/workspaces/util' के रूप में? –

1

डेनैक के समाधान के अतिरिक्त: पथ को/डी/से डी में बदलना:/मेरे लिए काम किया।

इस तरह

:

"repositories": [ 
    { 
     "type": "vcs", 
     "url" : "d:/workspaces/util" 
    } 
], 
24

AutoLoad स्थानीय पैकेज संगीतकार का उपयोग कर (हर बार जब आप बदल packagist के लिए जा रहा बिना)।

, ऐसा करने के लिए कई तरीके हैं मैं उनमें से 2 को कवर किया जाएगा:

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


Methode 1: (प्रत्यक्ष नाम स्थान)

ओपन मुख्य परियोजना composer.json फ़ाइल और autoload किसी भी विधि का उपयोग कर स्थानीय पैकेज नेमस्पेस (PSR-4, PSR-0, ...)।

उदाहरण:

संगीतकार में यदि।स्थानीय पैकेज के json हमने:

"autoload": { 
    "psr-4": { 
     “Local\\Pack\\": "library" 
    } 
    }, 
    "autoload-dev": { 
    "psr-4": { 
     "Local\\Pack\\Tests\\": "tests" 
    } 
    }, 

तो मुख्य परियोजना के composer.json में हम होना चाहिए:

"autoload": { 
    "psr-4": { 
     "Mahmoudz\\Project\\": "src", 
     "Local\\Pack\\": "../path/to/local/pack/library”     << referencing the other local package 
    } 
    }, 
    "autoload-dev": { 
    "psr-4": { 
     "Mahmoudz\\Project\\Tests\\": "tests" 
    } 
    }, 

लाभ:
- आप विक्रेता टच नहीं है निर्देशिका (गलती से संगीतकार अद्यतन चल रहा है अपने स्थानीय परिवर्तन पर हावी नहीं होगा)
- आप अपने पैकेज की जरूरत नहीं है यह
उपयोग करने के लिए packagist पर होने के लिए - आप एक ही स्थान (स्थानीय packa में काम जीई) और परिवर्तन स्वचालित रूप से मुख्य परियोजना में लोड किए गए हैं
नुकसान:
- आप उत्पादन (जरूरतों असली पैकेज की आवश्यकता होती है) प्रकाशित करने से पहले संपादन पर composer.json प्रकाशित नहीं कर सकते

Methode 2: (स्थानीय भंडार)

स्थानीय भंडार से स्थानीय पैकेज डाउनलोड करें।

स्थानीय पैकेज:
1. पैकेज में इनिशियलाइज़ Git (आप इसका इस्तेमाल नहीं करना चाहते हैं, भले ही - कोई जरूरत नहीं कुछ भी प्रतिबद्ध करने के लिए)
2. ऐड composer.json फ़ाइल। फ़ाइल में निम्न सुनिश्चित करें कि आपके:

"name": “vendor-name/package-name", 

"autoload": { … // use whichever method you prefer, but make sure it’s being loaded correctly 

"minimum-stability": “dev" 
  1. composer dump-autoload

मुख्य परियोजना:
1. संपादित अपने composer.json को रोकने के लिए निम्नलिखित:

"repositories": [ 
    { 
     "type": "vcs", 
     "url": “/full/path/to/the/local/package/package-name" 
    } 
    ], 
    "require": { 
    "vendor-name/package-name": "dev-master" 
    }, 
  1. संगीतकार अद्यतन विक्रेता-नाम/पैकेज नाम
  2. अब अपनी विक्रेता निर्देशिका की जाँच आप विक्रेता-नाम/पैकेज नाम देखना चाहिए

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

लाभ:
- आप (गलती से चल संगीतकार अद्यतन आपकी स्थानीय परिवर्तन पर हावी नहीं होगा) विक्रेता निर्देशिका टच न करें - आप अपने पैकेज की जरूरत नहीं है packagist पर होने की यह
उपयोग करने के लिए नुकसान:
- आपको अपने परिवर्तन (स्थानीय पैकेज में) और फिर मुख्य प्रोजेक्ट
में संगीतकार अद्यतन चलाना है - आप उत्पादन पर composer.json प्रकाशित नहीं कर सकते हैं (वास्तविक पैकेज की आवश्यकता के लिए प्रकाशन से पहले संपादन की आवश्यकता है)

+4

धन्यवाद, उत्कृष्ट! ** नोट: ** यदि आप _vcs_ दृष्टिकोण (# 2) का उपयोग कर रहे हैं, तो अपने composer.json परिवर्तनों को प्रतिबद्ध करना न भूलें। भूलना आसान है और आप अपने सिर को खरोंच कर रहे होंगे कि संगीतकार आपके पैकेज को "पैकेज संस्करण नहीं मिला" त्रुटियों के साथ क्यों घुमा रहा है। – mangonights

+2

आपका पहला मेथोड मेरा जीवन बचाया! कुडोस! –

+0

दूसरी विधि और @ मैंगोनाइट्स टिप्पणी ने मुझे भी बचाया ... धन्यवाद आप सभी ब्रो –

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