2012-02-10 20 views
7

में मॉड्यूल की जाँच करने के लिए निम्न मैं Git में सभी बाहरी निर्भरता में जांच करने के लिए 'सरकारी' सिफारिश के बाद समस्या आ रही है (लेख http://www.mikealrogers.com/posts/nodemodules-in-git.html fron पूछे जाने वाले प्रश्न जुड़ा हुआ)NodeJS और NPM: समस्याओं सिफारिश Git

  1. कैसे कर आप सुनिश्चित करते हैं कि न केवल शीर्ष-स्तरीय निर्भरताएं चेक-इन हों? अधिकांश एनपीएम मॉड्यूल वर्तमान में सिफारिश का पालन नहीं करते हैं। उनके पास सभी node_modules हैं .gitignore में। बस उनके .gitignore को हटाने खतरनाक लगता है।

  2. संकलित मॉड्यूल के लिए आलेख केवल स्रोतों को चेक-इन करने और 'npm rebuild' चलाने और समय पर तैनाती करने की अनुशंसा करता है। दुर्भाग्य से 'npm rebuild' सभी मॉड्यूल के लिए 'क्लीन मेक' नहीं करता है (बगफिक्स https://github.com/isaacs/npm/issues/1872 के बावजूद एनपीएम संस्करण 1.0.106 में शामिल किया जा रहा है)। इसका मतलब है कि मुझे संकलन लक्ष्यों को चेक-इन करने से रोकना है (अन्यथा मेरे पास एनपीएम पुनर्निर्माण द्वारा अधिलेखित किए बिना उत्पादन मशीन पर डेवलपर मशीन के लिए संकलित ऑब्जेक्ट कोड होगा)। लेकिन: मैं यह कैसे करूँ? दुर्भाग्य से मॉड्यूल एक आम संकलन उत्पादन निर्देशिका तो बस Git-अनदेखी "node_modules//निर्माण" और नहीं है, "/ node_modules//बाहर /" (यह अच्छा लेख eng.yammer.com/blog/ में उल्लिखित 2012/1/4/प्रबंध-NodeJS निर्भरता और तैनाती-एट-yammer.html हर मामले में मदद मिलेगी नहीं

लघु संस्करण:। कैसे आप यह सुनिश्चित करें कि उत्पादन सर्वर सटीक का उपयोग कर सकता हूँ ? सभी निर्भर मॉड्यूल की एक ही संस्करण आप विकास के दौरान उपयोग करने के रूप में

+0

मैंने http://stackoverflow.com/questions/11351784/npm-clean-modules/13957364#13957364 पर एक स्क्रिप्ट पोस्ट की जो मदद कर सकता है। – theGecko

उत्तर

4

अद्यतन: निर्भरता 'dependenc की अब भी है npm shrinkwrap जो सटीक निर्भरता संस्करणों नीचे ताला लगा की समस्या का हल, एँ! More info here.

node_modules में जांच की जा रही समस्या हो सकती है, पर्यावरण के रूप में यह पर चल रहा है उपयोगकर्ता से उपयोगकर्ता के लिए अलग हो सकता है - तो क्या कुछ पर्यावरण पर संकलित किया गया है एक और पर काम न करें। इसके अलावा यह आपके चेंजलॉग और रिपोजिटरी को तृतीय पक्ष कोड के साथ भर देगा। जो मैं इसे लेता हूं वह वह प्रश्न है जो आप प्रश्न के अपने लघु संस्करण के साथ आते हैं, इसलिए मुझे इसका समाधान करने दें।

लघु संस्करण: आप कैसे सुनिश्चित करते हैं कि उत्पादन सर्वर विकास के दौरान उपयोग किए जाने वाले सभी निर्भर मॉड्यूल के सटीक संस्करण का उपयोग करते हैं?

अपने package.json के अंदर, वहाँ dependencies: {} हो जाएगा, अगर यह वहाँ नहीं है, तो यह जोड़ सकते हैं। आप जो चाहते हैं उसे पूरा करने के लिए, अपनी निर्भरताओं को कुंजी के रूप में जोड़ें, और उनके सटीक संस्करण मान के रूप में जोड़ें। जैसे dependencies: { docpad: '2.5.0', mocha: '1.1.0' }

हालांकि, आम तौर पर (यह लेखक पर निर्भर करता है) संशोधन संख्या (x.x.X संख्या) के उन्नयन केवल बगफिक्स और सुरक्षित हैं। आप dependencies: { docpad: '2.5.x', mocha: '1.1.x' } जो आप अपने package.json अद्यतन करने के लिए होने से बचाता है ऐसा करके मामूली परिवर्तन की अनुमति है और एक रिलीज हर वहाँ एक बग सुधार रिलीज है कर सकते हैं। यदि आप चाहें तो 2.x जैसी चीजें भी कर सकते हैं।

यह वह समाधान है जो मैं अपने सभी मॉड्यूल के लिए उपयोग करने आया हूं, क्योंकि यह सुनिश्चित करता है कि 6 महीने बाद या जो भी मॉड्यूल अभी भी काम करेगा - जबकि >= 2.0.0 जैसे कुछ करने का मतलब है कि जब निर्भरता का v3 आता है, अपने मॉड्यूल शायद उस समय व्यर्थ हो जाएगा। आप विशिष्ट संस्करण के लिए छड़ी सुनिश्चित करना समय के साथ स्थिरता "की गारंटी देता है"।

For reference you can see how I've done it in my open-source node.js modules here

+0

धन्यवाद। मैं आपके द्वारा वर्णित पैकेज.जेसन में पहले से ही अलग संस्करण स्थापित कर रहा हूं। लेकिन यह केवल मेरी शीर्ष-स्तरीय निर्भरताओं से संबंधित है। मैं निर्भरताओं की निर्भरताओं पर नियंत्रण नहीं प्राप्त कर सकता हूं। – dknaus

+0

ओह्ह्ह्ह सही ... कुछ बार मैंने जो मुकाबला करने के लिए किया है वह निर्भरता में परिवर्तन कर रहा है और एक पुल अनुरोध दर्ज कर रहा है, और इस बीच जब तक इसे आधिकारिक तौर पर विलय नहीं किया जाता है तब तक इसका अपना स्वाद प्रकाशित करें। जैसे 'डॉकपैड' को 'डॉकपैड-बाल' या कुछ में बदलें, और मूल प्रोजेक्ट में अपने स्वाद का संदर्भ लें। जब इसे विलय कर दिया जाता है तो इसे अप्रकाशित करें। – balupton

+0

अभी जारी किए गए एनपीएम सिकंक्रैप का संदर्भ जोड़ा गया है जो उस समस्या को हल करता है जिसे आप @ user1194821 के बारे में बात कर रहे थे – balupton

1

अपने निर्भरता .gitignore ("node_modules" में) के बारे में, NPM 1.1 इतना है कि वे स्थापित नहीं हैं, .gitignore फ़ाइलों पर ध्यान नहीं देता;

npm 1.1 will exclude .gitignore files from the things it installs. 
npm 1.0 did not have this feature, so you have to be careful about that. 
Deleting them recursively is fine: 
    find node_modules -name .gitignore | xargs rm 
But, in npm 1.1, you never have to do this, because it excludes them 
from the install automatically. 

प्रमुख खुद (इसहाक) से आ रहा है यही कारण है, और it's here और काफी सब कुछ कवर करने के लिए लगता है। मेरे पास "अपर्याप्त" समस्या कुछ मूर्खतापूर्ण होनी चाहिए जो मैंने किया है, मैं एक साफ सेटअप करने की कोशिश करूंगा।

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