2013-06-18 7 views
6

मैंने अभी कंपोज़र सुविधा का उपयोग करना शुरू कर दिया है, जहां आप इसे निर्भरताओं के लिए स्थानीय निर्देशिकाओं को देखने के लिए कहते हैं, ताकि आप लाइब्रेरी और कुछ ऐसा विकसित कर सकें जो उस लाइब्रेरी को समानांतर में उपयोग करता है, बिना हर समय अद्यतन करने के लिए गिट को दबाए बिना, जो कमाल है। जैसेसंगीतकार विकल्प composer.json के लिए विकल्प का उपयोग करने के लिए?

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/guzzle" 
    } 
], 

"require":{ 
    "guzzle/guzzle": "3.7.*@dev" 
} 

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

हालांकि मैंने बस उस परियोजना के साथ अपने प्रोजेक्ट के लिए composer.json में चेक किया - जो स्पष्ट रूप से किसी भी एल्स मशीन पर काम नहीं करेगा।

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

उत्तर

2

स्थानीय भंडार से कहीं और लाने के बजाय आप --prefer-source को composer install/update कमांड विकल्प में जोड़ सकते हैं और स्थानीय भंडार संदर्भ को हटा सकते हैं।

इस तरह संगीतकार विक्रेता को विक्रेता निर्देशिका में गिट क्लोन कहलाएगा, और आप अपने सॉफ़्टवेयर को विकसित कर सकते हैं और विक्रेता सॉफ़्टवेयर को प्रतिबद्ध कर सकते हैं, क्योंकि यह एक पूरी तरह से काम कर रहे गिट रेपो भी है।

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

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

0

ऐसा लगता है कि संगीतकार के भीतर यह अच्छी तरह से करने का कोई तरीका नहीं है, हालांकि इसके आसपास हैक करना संभव है।

आपकी संगीतकार.जेसन फ़ाइल में एक टिप्पणी दें जहां आप कुछ डेटा में हैक करना चाहते हैं।

"LOCALHACK", 

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/intahwebz-core" 
    } 
], 

नई composer.json उत्पन्न करने के लिए कहा जाता है composerLocal.php एक छोटे PHP स्क्रिप्ट जोड़ें:

{ 
"name": "base-reality/intahwebz", 

"//": "LOCALHACK", 

"require":{ 
    "base-reality/php-to-javascript": ">=0.1.17", 
    "guzzle/danackguzzle": "3.3.*@dev", 
    ... 
    ... 
    } 
    ... 
} 

तो एक अलग फाइल composer.local (Git करने के लिए प्रतिबद्ध नहीं) है कि स्थानीय निर्देशिका के लिए संदर्भ शामिल है फ़ाइल

<?php 

$srcFile = file_get_contents("composer.json"); 
$hackFile = file_get_contents("composer.local"); 
$finalString = str_replace('"LOCALHACK",', $hackFile, $srcFile); 
file_put_contents("composer.json", $finalString); 

?> 

और एक छोटे से बैश स्क्रिप्ट असली composer.json फ़ाइल बैकअप के लिए localupdate.sh कहा जाता है, को हैक कर लिया composer.json, चलाने के संगीतकार पैदा करते हैं और उसके बाद बहाल मूल composer.json फ़ाइल

cp -f composer.json composer.json.bak 
php composerLocal.php 
composer update 
cp -f composer.json.bak composer.json 

localupdate.sh स्क्रिप्ट चल रही है आप इस परियोजना द्वारा इस्तेमाल किया वास्तविक composer.json फ़ाइल को संशोधित करने के खतरे के बिना स्थानीय स्तर पर प्रतिबद्ध जांच करने देता है, इसलिए वहाँ गलती की संभावना उतनी ही कम है एक अवैध composer.json को भंडार में दबाकर।

बस ध्यान दें, संगीतकार शोजी निर्देशिका से फ़ाइलों को नहीं पढ़ता है, यह गिट में कमेटेड फाइलें पढ़ता है ताकि आपको लाइब्रेरी कोड में किए गए परिवर्तनों को करने की आवश्यकता हो। उपरोक्त प्रक्रिया सिर्फ धक्का देने वाला कदम छोड़ देती है।

-1

आसान, बस आर्टिफैक्ट का उपयोग करें।

खजाने में इस जोड़ें:

{ 
    "type": "artifact", 
    "url": "path/to/artifact/files/" 
}, 

अब तुम सिर्फ निर्देशिका बनाने की जरूरत है और है कि निर्देशिका में अपने भंडार की एक प्रति को ज़िप। इसलिए जैसे

नाम ज़िप की गई फ़ाइलों:

[vendorname]-[packagename]-[version].zip 

उदाहरण:

querypath-QueryPath-3.0.0.zip 

अब आप पैकेज स्थानीय रूप से संशोधित कर सकते हैं और यह ज़िप फ़ाइल के बजाय ऑनलाइन रेपो से खींच लेंगे।

में इतना है कि यह जोड़ सकते हैं और संस्करण निर्दिष्ट की आवश्यकता के रूप में ज़िप में परिभाषित:

"querypath/QueryPath": "3.0.0", 

इस प्रक्रिया में विक्रेता फ़ाइलों को संपादित करने की क्षमता होगी और संगीतकार अभी तक किसी भी autoloaders परिवर्तन के सापेक्ष अपडेट हो जाएगा और साथ यह आपके परिवर्तन अकेले छोड़ देगा।

+0

मुझे पता है कि composer.json फ़ाइल को कैसे संपादित करें। सवाल यह था कि "composer.json को संपादित करने से बचने के लिए, composer.json की तुलना में एक अलग फ़ाइल का उपयोग करने के लिए संगीतकार को बताने के लिए वैसे भी है"। – Danack

+0

क्षमा करें, प्रश्न के बिंदु को याद करते हैं। सोचा था कि आप पुस्तकालयों को संपादित करना चाहते हैं और संगीतकार उन्हें अकेला छोड़ दें। –

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