2015-03-13 10 views
10

का उपयोग करते समय वैश्विक एनपीएम पैकेज प्रबंधित करना मुझे लगता है कि मुझे एनएमवी डीआईआर में अलग-अलग वैश्विक एनपीएम पैकेज स्थापित करने में सक्षम होना चाहिए।एनवीएम

$ nvm install v0.11 
######################################################################## 100.0% 
Now using node v0.11.16 
$ node-inspector 
Node Inspector v0.9.2 
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging. 

मेरे नोड-इंस्पेक्टर ने काम करना बंद कर दिया!

$ npm update -g 
<bunch of updating, succeeds> 

शायद यह मदद करेगा ... नहीं! अभी भी टूटा। श्वास। शायद ... नोड-इंस्पेक्टर v0.11.16 (जो एनवीएम पर चल रहा है) के लिए काम नहीं करता है। शायद। कौन जाने। खैर, निरस्त करने का समय।

$ nvm use system 
Now using system version of node: v0.10.32. 
$ node-inspector --version 
dyld: lazy symbol binding failed: Symbol not found: _node_module_register 
    Referenced from: /usr/local/lib/node_modules/node-inspector/node_modules/ws/build/Release/bufferutil.node 
    Expected in: dynamic lookup 

dyld: Symbol not found: _node_module_register 
    Referenced from: /usr/local/lib/node_modules/node-inspector/node_modules/ws/build/Release/bufferutil.node 
    Expected in: dynamic lookup 

[1] 93845 trace trap node-inspector --version 

ठीक है .... अच्छा .... चुप।

तो वैसे भी, इस बिंदु पर मैं ठीक करने के निर्देशों की तलाश नहीं कर रहा हूं। मैं अच्छी तरह से हो सकता है। यहां मुख्य प्रश्न यह है कि मुझे इन एनपीएम पैकेजों को प्रबंधित करने के लिए क्या करना है जो कमांड लाइन टूल्स के लिए हैं और जिनके पास विशिष्ट संस्करणों से जुड़े घटकों को संकलित किया गया है? मैं समझता हूं कि जब मैं एनवीएम स्थापित करता हूं और इसे अपने सिस्टम में शामिल करता हूं, तो मेरा खोल $PATH स्विच करने में सक्षम होता है ताकि जब मैं node और npm पर कॉल करूं, तो वे उठाए गए नोड संस्करण का उपयोग करके भाग लेंगे।

लेकिन ऐसा लगता है जैसे कि वैश्विक NPM संकुल /usr/local/bin/ में कहीं डाल जाते हैं और वे सिर्फ वहाँ फंस रहे हैं और पालन करने के लिए कि मैं क्या nvm के साथ क्या असमर्थ हो जाते हैं - यह मामला नहीं हो सकता है "सैद्धांतिक रूप से अच्छी तरह से करने के लिए व्यवहार नोड पैकेज ", अभ्यास में (कम से कम node-inspector जैसे कुछ के लिए) यह सुनिश्चित करता है कि इसे स्थापित करने वाले नोड का उपयोग करके निष्पादित नहीं होने पर यह स्पष्ट रूप से विस्फोट करने के लिए उत्तरदायी है।

इस बीच में मैं, हर बार है कि मैं चाहता हूँ nvm उपयोग कर एक नया नोड संस्करण के तहत है कि पैकेज को चलाने के लिए मूल रूप से npm remove -g <package> && npm install -g <package> किसी भी पैकेज है कि मुझे लगता है इस तरह से अजीब व्यवहार किया है।

यह गलत लगता है।

क्या यह गलत है?

और, यह एक अनुशासनिक होगा कि हर बार जब मैं नोड के एक अलग संस्करण के साथ कुछ दिए गए node.js ऐप का परीक्षण करने के लिए एनवीएम शक्तियों का आह्वान करता हूं, तो मुझे इसे पूरी तरह से नई निर्देशिका में क्लोन करके और इसे शुरू करना चाहिए ताजा, क्योंकि अन्यथा मुझे शायद पता चलेगा कि मुझे इसे rm -rf node_modules && npm install की आवश्यकता होगी ताकि इसे बिल्कुल काम कर सकें ...

+0

मैं साफ आया हूँ ...'नोड-इंस्पेक्टर' "काम नहीं कर रहा था" संभवतः क्योंकि मुझे फ़ायरवॉल प्रॉम्प्ट नहीं आया था। फिर भी यह मेरे प्रश्न को अमान्य नहीं करता है। मुझे अभी भी डाइल्ड बग इत्यादि का अनुभव है और मुझे पैकेजों के हटाने और पुनर्स्थापित करने (जो पुन: संकलन आदि) के बजाय कठोर उपाय करने की आवश्यकता है। मैं nvm नोड संस्करण से संबंधित पथ का उपयोग करने के लिए npm -g को कॉन्फ़िगर करके यह अनावश्यक बनाना चाहता हूं। क्या यह संभव है? –

उत्तर

1

मैंने आपकी स्थिति को गलत समझा होगा, लेकिन ऐसा लगता है कि आपको अपने द्वारा उपयोग किए जाने वाले सभी वैश्विक पैकेज इंस्टॉल करने की आवश्यकता है आप जिस नोड संस्करण का उपयोग कर रहे हैं उसके लिए अलग से। इस तरह से काम करने का कारण यह है कि आपको विभिन्न नोड संस्करणों के लिए संकुल के विभिन्न संस्करणों की आवश्यकता हो सकती है। इसलिए जब भी आप nvm use ... का उपयोग करते हैं तो यह नोड के चयनित संस्करण के लिए स्थापित संकुल में वैश्विक संकुल के पथ बदलता है।

उम्मीद है कि यह मदद करता है।

+0

मैं 'एनवीएम' के साथ खेलने के लिए वापस आ गया हूं, लेकिन मैं इस धारणा के तहत था कि 'nvm' किसी भी तरह से नोड संस्करणों के साथ वैश्विक 'npm' निर्भरता फ़ाइलों को प्रबंधित करने में आपकी सहायता करके आपकी सहायता नहीं करता है। इसलिए चूंकि यहां तक ​​कि कुछ भी नहीं है जो वैश्विक स्तर पर 'package.json' के समान काम करता है, अच्छी तरह से ... स्थिति बहुत आदर्श नहीं है ... –

+0

जैसा कि मैंने लिखा है, एनवीएम सभी वैश्विक पैकेजों को अलग फ़ोल्डर में स्टोर करता है संगतता कारणों के लिए प्रत्येक नोड संस्करण। साथ ही जब आप एनपीएम लिंक का उपयोग करते हैं, तो पैकेज के लिए सिम्लिंक उसी फ़ोल्डर में जाता है, जो अनिवार्य रूप से इसे वैश्विक बनाता है। आपको इसे प्रबंधित करने के लिए वास्तव में किसी भी मेनिफेस्ट फ़ाइल की आवश्यकता नहीं है - बस 'npm install -g'/'npm uninstall -g'। मेरे पास आमतौर पर एक बैश स्क्रिप्ट होती है जो प्रोजेक्ट के लिए आवश्यक सभी संकुल स्थापित करती है और इसे परियोजना के साथ एक साथ प्रतिबद्ध करती है ताकि दूसरों के लिए वैश्विक निर्भरता बनाए रखना आसान हो। – esp

+0

मैं अगली बार सत्यापित करने की कोशिश करूंगा कि एनवीएम वास्तव में सिमलिंक को स्वैप कर रहा है या अन्यथा इन वैश्विक संसाधनों को प्रबंधित करने में मदद करने के लिए कुछ कर रहा है जब मैं नोड संस्करण बदलता हूं। यह वही होगा जो मुझे चाहिए, और जब भी मैंने प्रश्न लिखा था तो मेरे लिए यह काम नहीं कर रहा था। धन्यवाद। –

4

nvm मदद से संदेश:

nvm install [-s] <version>    Download and install a <version>, [-s] from source. Uses .nvmrc if available 
    --reinstall-packages-from=<version>  When installing, reinstall packages installed in <node|iojs|node version number> 
    --lts         When installing, only select from LTS (long-term support) versions 
    --lts=<LTS name>      When installing, only select from versions for a specific LTS line 

प्रासंगिक झंडा --reinstall-packages-from=<version> है। बस अपने आदेश (उदाहरण) फिर से चलाएँ:

$ nvm install v6.9.2 --reinstall-packages-from=v4.4.5 
संबंधित मुद्दे