2014-12-31 10 views
5

मेरे पास एक ऐसी सेवा है जहां मैं उपयोगकर्ताओं को इंस्टॉलेशन-टाइम पर निर्दिष्ट करने की अनुमति देना चाहता हूं कि कौन सा दृढ़ इंजन इंजन का उपयोग करना है, यानी फ़ाइल-आधारित, मोंगोडीबी, या रेडिस, और मैं कुछ एनपीएम जादू की तलाश में हूं जहां आप केवल आवश्यक मॉड्यूल डाउनलोड करते हैं (क्रमशः कोई भी, mongodb, या redis)।क्या मैं npm package.json में वैकल्पिक मॉड्यूल निर्भरता निर्दिष्ट कर सकता हूं?

क्या यह संभव है? मुझे पैकेज.जेसन में निर्भरता और devDependencies परिभाषित करने के अलावा कोई विकल्प नहीं मिल रहा है, और यह इसके लिए उपयुक्त नहीं है।

यह भी ध्यान दें कि जब मोंगोडब और रेडिस मॉड्यूल अपेक्षाकृत छोटे हो सकते हैं, तो एक वैकल्पिक मामले पर विचार करें जहां आपको वैकल्पिक रूप से आरएमआई संचार के लिए जावा की आवश्यकता हो सकती है।

धन्यवाद!

+0

एक ['वैकल्पिक निर्भरता 'फ़ील्ड] (https://docs.npmjs.com/files/package.json#optionaldependencies) है, लेकिन यह वह नहीं है जिसे आप ढूंढ रहे हैं। – Scimonster

+0

असल में मुझे लगता है कि पर्याप्त होगा। यदि कोई वैकल्पिक mongodb इंस्टॉल करने में विफल रहता है क्योंकि कोई C++ कंपाइलर नहीं है या कोई वैकल्पिक नोड-जेएमएक्स विफल रहता है क्योंकि कोई जेआरई नहीं है, तो यह ठीक है। दस्तावेज़ भी जेएस कोड दिखाता है, लेकिन आप अपने पैकेज.जेसन में {"वैकल्पिक निर्भरता" जोड़ सकते हैं: {} 'और यह काम करता है। यदि आप अपने उत्तर में इस बारे में कुछ संपादित करते हैं तो मैं इसे सही चिह्नित करूंगा। – anthonyserious

उत्तर

2

आप पोस्ट-इंस्टॉल स्क्रिप्ट का उपयोग करना चाहेंगे, और फिर उन्हें इंस्टॉल करें।

आप npm module प्रोग्रामेटिक रूप से उपयोग करके चीजें इंस्टॉल कर सकते हैं।

तो, आप कुछ इस तरह कर सकते हैं:

var npm = require('npm'); // make sure npm is in your package.json! 
npm.load({/* some object properties, if needed */}, function(err) { 
    if (err) {return handleError(err)} 
    if (usingMongoDB) { 
     npm.commands.install(['mongodb'], function(err){ 
     if (err) {return handleError(err)} 
     console.log('mongodb successfully installed'); 
    }); 
}); 

अब, मैं कभी नहीं कुछ इस तरह किया है, तो मैं सुझाव है कि आप कार्यक्रम संबंधी npm install के लिए दस्तावेज़ को देखें, और भी load

+0

दिलचस्प। एक पोस्ट-इंस्टॉल स्क्रिप्ट चलाना निश्चित रूप से काम कर सकता है, लेकिन मैं एक लाइन समाधान की उम्मीद कर रहा हूं। मैं ऐप के पहले से ही पैकेज को डाउनलोड करने के बारे में अजीब महसूस करूँगा क्योंकि उस ऐप को पहले ही तैनात कर दिया गया है। – anthonyserious

+0

मैं इस दृष्टिकोण की अनुशंसा नहीं करता क्योंकि एनपीएम आपको एपीआई का उपयोग न करने की चेतावनी देता है: [_ हालांकि एनपीएम प्रोग्रामेटिक रूप से उपयोग किया जा सकता है, इसकी एपीआई केवल सीएलआई द्वारा उपयोग के लिए है, और किसी अन्य उद्देश्य के लिए इसकी फिटनेस के संबंध में कोई गारंटी नहीं दी जाती है। _] (https://github.com/npm/npm#using-npm-programmatically) इसके बजाय आप [इस दृष्टिकोण] का उपयोग कर सकते हैं (http://stackoverflow.com/a/17537559/516433) – Lucas

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