2012-12-13 11 views
5

मैं /var/http/common/ कहता हूं, और मेरे एप मॉड्यूल को एक केंद्रीकृत स्थान में संग्रहीत करना चाहता हूं, और /var/http/www/apps/APP#1_NAME/ कहें, मेरा ऐप किसी अन्य स्थान पर लाइव/चलाएं।केंद्रीकृत नोड_मोड्यूल

मैं स्थापित करने के लिए require('../../../common/express') की तरह संबंधित पथ का उपयोग करने के server.js में की आवश्यकता है में सक्षम था, लेकिन NPM के लेखक द्वारा posts पढ़ने से, यह लग रहा है जैसे मैं इसे हैकिंग कर रहा हूँ, और मैं npm link का प्रयोग कर एक "स्थानीय" संदर्भ बनाने के लिए करना चाहिए नोड के लिए (जो असली स्थापना के लिए symlinks)।

मैं पहली बार /var/http/common/ में मेरी नोड मॉड्यूल स्थापित है, लेकिन फिर जब मैं सिमलिंक (npm link ../../../common/node_modules/express) बनाने की कोशिश की, NPM /usr/local/lib/node_modules/express में "वैश्विक" स्थापित करते हैं, और फिर से स्थापित एक्सप्रेस जैसे कि यह इलाज किया है लगता है (और एक बनाया इसे "स्थानीय" सिम्लिंक ./node_modules/express ->) जो मुझे होने की उम्मीद नहीं है। क्या मैं वास्तव में यह चाहता हूं? क्या मुझे पहले npm config set prefix का उपयोग करना चाहिए था?

उत्तर

3

बाहर कर देता है: मैं होना चाहिए कुछ और करने से पहले npm config set prefix सेट करें।

ऐसा लगता है कि npm link और npm install -g वही काम करते हैं; हालांकि, npm link वैश्विक स्तर पर मॉड्यूल स्थापित करेगा, यह भीnode_modules में स्थानीय प्रतीकात्मक लिंक बनाता है $prefix/lib/node_modules/$module पर इंगित करता है। MaxGfeller गलत है: उस स्थानीय सिम्लिंक के बिना, नोड शिकायत करेगा कि यह (वैश्विक रूप से स्थापित) मॉड्यूल नहीं ढूंढ सकता है। यह मेरे अपने प्रयास के माध्यम से निर्धारित किया जाता है और साथ ही npm help folders से अनुमान लगाया जाता है:

• यह स्थानीय स्तर पर स्थापित करें आप जा रहे हैं तो() यह आवश्यकता होती है।

• यह विश्व स्तर पर स्थापित करें आप कमांड लाइन पर इसे चलाने के लिए जा रहे हैं।

• आप दोनों की जरूरत है, तो यह दोनों ही स्थानों पर स्थापित करें, या NPM लिंक का उपयोग करें।

यह विशेष रूप से संबोधित नहीं करता कि मैं क्या पूछा: मैं एक केंद्रीय स्थान में संग्रहित मॉड्यूल करना चाहते हैं (कई नोड अनुप्रयोग द्वारा पहुँचा जा करने के लिए), लेकिन मैं उन्हें आदेश से उपयोग के बारे में परवाह नहीं है जैसे मैं केवल उन्हें require('') में उपयोग करना चाहता हूं।

require('') में सापेक्ष पथों का उपयोग करने के बारे में मेरे प्रश्न के लिए, मुझे अभी भी इसके लिए एक आधिकारिक उत्तर नहीं मिला है, लेकिन यह npm link के अस्तित्व से प्रतीत होता है कि रिले पथ का उपयोग लेखक का इरादा नहीं है। मेरे लिए यह six-of-one के मामले की तरह लगता है, लेकिन मैं नोड के मानक के साथ संगत रहना चाहता हूं।

+0

लगता है कि स्थानीय सिम लिंक से बचने के लिए आपको $ NODE_PATH सेट की आवश्यकता है –

2

आप कमांड में '-g' जोड़कर वैश्विक स्तर पर अपने नोड मॉड्यूल इंस्टॉल कर सकते हैं। उदाहरण के लिए:

npm install express -g 

अपने कोड में आप इसे सामान्य रूप से उपयोग कर सकते हैं:

require('express'); 

मॉड्यूल तो/usr/स्थानीय/lib में जमा हो जाती/node_modules

+0

हाय मैक्स। धन्यवाद, लेकिन मैं नहीं चाहता कि उन्हें उस स्थान पर इंस्टॉल किया जाए (क्या मुझे पहले एनपीएम कॉन्फ़िगरेशन सेट उपसर्ग का उपयोग करना चाहिए?)। इसके अलावा मैं पूछ रहा था क्योंकि मैंने एनपीएम इंस्टॉल नहीं किया था, मैं एनपीएम लिंक चला गया; इसलिए मैं जानना चाहता हूं कि यह एक इंस्टाल क्यों चलाया गया-शायद ऐसा इसलिए हुआ क्योंकि यह पता चला कि मॉड्यूल डिफ़ॉल्ट वैश्विक स्थान में स्थापित नहीं थे? – jacob

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