NVM को रूट (या sudo) से उपयोग नहीं किया जा सकता


104

मैंने उल्लेख किया है कि मेरे एप्लिकेशन से चलते समय NodeJS के विभिन्न संस्करण का उपयोग किया जाता है sudo

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

इस v0.11.8-pre ने मुझे कुछ समस्याएं दीं , इसलिए मैं निश्चित रूप से इसका उपयोग नहीं करना चाहता, लेकिन मैं इसे रूट के लिए नहीं बदल सकता।

$ sudo nvm use v0.10.23
sudo: nvm: command not found

मैंने रूट उपयोगकर्ता से एनवीएम स्थापित करने की कोशिश की है, लेकिन त्रुटि "एनवीएम पहले से ही स्थापित है", लेकिन अभी भी एनवीएम नहीं मिला जब से चल रहा है sudo। मेरी समस्या क्या है?


3
sudo -s फिर स्थापित करने का प्रयास करें nvm
गेम्स ब्रेनियाक

@GamesBrainiac क्षमा करें, लेकिन मैं ने लिखा है कि मैं जड़ से इसे स्थापित करने की कोशिश की है
विटाली Korsakov

/root/.nvm/ को हटाने और खरोंच से एनवीएम को पुनर्स्थापित करने का प्रयास करें
एंटोनियो ई।

कोई /root/.nvm नहीं है मैंने sudo से nvm स्थापित किया है और इसे नियमित उपयोगकर्ता होमेडिर में स्थापित किया गया है
Vitalii Korsakov

4
यह मेरी सारी समस्या को हल करता है, जैसा कि आपने github.com/xtuple/nvm
Yoo Matsuo

जवाबों:


220

कमांड की नीचे दी गई सूची (स्रोत: डिजिटलोसैन ) समस्या को ठीक करती है

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

उपरोक्त कमांड थोड़ा जटिल है, लेकिन यह सब कर रहा है कि आप नोड के जिस भी संस्करण को सक्रिय कर रहे हैं, उसे /usr/local/निर्देशिका में एनवीएम के माध्यम से कॉपी कर रहे हैं (जहां उपयोगकर्ता ने वैश्विक फ़ाइलों को लिनक्स VPS पर लाइव होना चाहिए) और अनुमतियाँ सेट की हैं ताकि सभी उपयोगकर्ता उन तक पहुंच सकें ।

उम्मीद है की यह मदद करेगा!


7
धन्यवाद, इसने मेरी मदद की।
विशाल कुमार वर्मा

7
धन्यवाद! इसने मुझे बहुत समय बचाया
क्विंटन पाइक

4
उत्तम! बहुत बहुत धन्यवाद।
जीन-बैप्टिस्ट लोएज़ेल

2
बहुत बढ़िया! कल रात मैंने अपने पूरे रास्पपी 3 सिस्टम को पूरी तरह से npm के लिए पूरी तरह से अनुमतियों को बदलकर बर्बाद कर दिया, आज मैंने 3h खर्च किए प्रत्येक नोड npm कॉल के लिए sudo की आवश्यकता के बिना विश्व स्तर पर नोड / npm स्थापित करने के लिए सबसे अच्छा समाधान ढूंढ रहा है। आपका समाधान इस पोस्ट के साथ अच्छी तरह से चला गया losant.com/blog/how-to-install-nodejs-on-raspberry-pi
bosch

3
यह एक बेहतरीन विकल्प की तरह लगता है, लेकिन मुझे ये त्रुटियां chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
मिलती रहती

129

मेरा समाधान के संस्करणों से प्रतीकात्मक संबंध बनाना है nodeऔर npmमैं इसका उपयोग कर रहा हूं /usr/local/bin:

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

यह सभी उपयोगकर्ताओं के लिए उपलब्ध है npmऔर nodeउपलब्ध है।


1
महान समाधान। बस "दूसरी पंक्ति के अंत में जोड़ें ... (मैं इसे किसी कारण से स्वयं संपादित नहीं कर सका)
रेई रोडेड

1
महान, यह अब तक का सबसे अच्छा समाधान है। इस तरह, रूट हमेशा उसी npm / नोड संस्करण का उपयोग करेगा जिसे आप nm उपयोगकर्ता पर उपयोग कर रहे हैं, धन्यवाद!
११:१३ बजे ल्यूसीवलमेइडा

3
महान समाधान, लेकिन यदि आप अपने द्वारा उपयोग किए जा रहे नोड के संस्करण को बदलते हैं, तो आपको उपरोक्त आदेशों को फिर से चलाना होगा।
door_number_three

4
मैं npxअक्सर उपयोग करता हूं । इसलिए मैंने इसे भी जोड़ा:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
थॉमस

@SimpleJ आप कैसे करेंगेbabel-node
user566245

14

आपकी समस्या यह है, कि nvmजब आप उपयोग करते हैं तो वह मार्ग में नहीं होता है sudo

तो टाइप करें

$ which nvm

और परिणाम कुछ इस तरह होगा

/home/abc/mynvm/nvm

अब फिर से कोशिश करें sudo:

sudo /home/abc/mynvm/nvm use v0.10.23

मुझे लगता है कि आप इस मुद्दे को चलाते हैं कि रूट उपयोगकर्ता 0.10.13-संस्करण नहीं खोज सकता है, लेकिन अगली त्रुटि संदेश देखने देता है ...


42
which nvmआउटपुट कुछ नहीं
विटालि कोर्साकोव

6
यह रूट के लिए कुछ भी नहीं आउटपुट करता है
विटाली कोर्सकोव

3
समस्या यह है कि मैं कभी रूट के रूप में लॉग इन नहीं करता। मैं क्यों? अगर मुझे किसी भी रूट एक्सेस की आवश्यकता होती है तो मैं हमेशा उपयोग करता हूं sudo। हां, मैं रूट के रूप में लॉग इन कर सकता हूं और एनवीएम स्थापित कर सकता हूं, लेकिन भविष्य में मैं नहीं चला सकता sudo nvm use v0.10.25। इसलिए मैं sudo nodeउपयोगकर्ता से भी उपयोग नहीं कर सका ।
विटालि कोर्साकोव

2
which nvmकभी काम नहीं करता है, यह करता है? nvmयह एक निष्पादन योग्य नहीं है, यह एक शेल फ़ंक्शन है। github.com/creationix/nvm/issues/540
मैट

2
मैंने हाल ही में which nvmयहां के बारे में एक समान प्रश्न पूछा है: stackoverflow.com/questions/49156104/…type nvm इसकी परिभाषा प्रकट करने के लिए उपयोग करें । जैसा कि मैट ने कहा, यह एक शेल फ़ंक्शन है।
मार्टिन ब्रौन

13

मूल कारण यह nvmहै कि एक वास्तविक कार्यक्रम नहीं है। यह एक पार्टी समारोह है कि उपयोगकर्ता के में लोड हो जाता है है .profile, .bashrcया ... तो sudoस्वचालित रूप से इसे सबसे अन्य कार्यक्रमों की तरह $ पथ से लेने नहीं करता है।

एक वैकल्पिक नोड संस्करण प्रबंधक है n: https://github.com/tj/n । यही कारण है कि एक वास्तविक कार्यक्रम है, इसलिए sudoयह किसी भी हैक्स के बिना $ पथ के माध्यम से लेने जाएगा (जब तक sudoहै /usr/local/binइसकी $ पथ में)।

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0

उत्तम। धन्यवाद "एनवीएम एक समस्या नहीं है, लेकिन एक बश फ़ंक्शन" :)
एक और

Haha, बस "प्रोग्राम" के बजाय मेरी गलत वर्तनी "समस्या" के बारे में एहसास हुआ;)।
एक और

7

README के अनुसार

एनवीएम का उपयोग करते समय आपको sudoविश्व स्तर पर एक मॉड्यूल स्थापित करने की आवश्यकता नहीं होती है npm -g, इसलिए ऐसा करने के बजाय sudo npm install -g grunt, इसके बजाय करेंnpm install -g grunt

सूद npm की जरूरत है?

मेरे मामले में, मुझे इसकी आवश्यकता है sudo npm run startजो रूट एक्सेस की आवश्यकता वाले कुछ फ़ाइल तक पहुंच की आवश्यकता है। इस मुद्दे के अनुसार ,

आप उपयोग नहीं करते sudo। इसके बजाय आपको फ़ाइल को chmod / chown करना चाहिए ताकि nvm वाले उपयोगकर्ता की फ़ाइल तक पहुँच हो;;

कुल मिलाकर

एनवीएम के अनुरक्षक का दृढ़ता से मानना ​​है कि हमें इसकी आवश्यकता नहीं है sudo: पी


6

मुझे आपकी समस्या भी थी। अंत में मैंने इसके आसपास काम किया है। यहाँ मेरा समाधान है:

  1. एनवीएम और नोडज की स्थापना रद्द करें। यहां कुछ उपयोगी लिंक दिए गए हैं: एनवीएम की स्थापना । यदि आपने apt-get का उपयोग करके नोडज स्थापित किया है, तो आप इसे कमांड के साथ अनइंस्टॉल कर सकते हैं apt-get purge nodejs
  2. एक वैश्विक एनवीएम स्थापित करें। : यह पेज देखें nvm वैश्विक । जैसा कि कहते हैं, "मानक एनवीएम ने बहु-उपयोगकर्ता या जड़ वाले वातावरण में काम करने में कठिनाइयों को जाना है।"

अपने टर्मिनल को पुनरारंभ करने के बाद, आप कमांड चला सकते हैं sudo nvm ls


1
यह शाखा 12 आगे है, 1123 क्रिएमिक्स के पीछे है: मास्टर। nvm के लिए xtuple रेपो से सीधे लिया गया
MrMesees


4

मैंने अपनी मशीन पर वही आजमाया है जहाँ मेरे पास nvmभी है और मेरे पास अलग-अलग प्रतिक्रिया है:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

मेरा अनुमान है कि आपने nvm के बाहर नोड 0.11 स्थापित किया है। ( वाया पैकेज मैनेजर या सोर्स से भी )

इसलिए, सूडो के माध्यम से नोड चलाने के बजाय इस स्टैंडअलोन नोड को उठाया जाएगा।

क्या इसका कोई मतलब है या मैं गलत हूँ?


हाँ आप सही है। मैंने नोड स्थापित किया है और फिर nvm । लेकिन सब कुछ सामान्य उपयोगकर्ता के लिए ठीक काम करता है और रूट के लिए काम नहीं करता है।
विटालि कोर्साकोव

1
ओह ठीक है। फिर, मुझे लगता है कि एनवीएम को रूट के रूप में चलाने का मतलब नहीं है। वास्तव में मैं बहुत सुंदर हूं कि उपयोगकर्ता भूमि में दौड़ना एक वांछित विशेषता है। हालाँकि, यह आपकी मदद कर सकता है: github.com/creationix/nvm/issues/5
औरेलियोन थिएरियट

इस आदमी ने जाहिरा तौर पर एक विशेष एनवीएम बनाया जो सुडो मोड में चलता है: github.com/xtuple/nvm । दुर्भाग्य से केवल सुडो मोड में। मुझे नहीं पता कि यह स्वीकार्य है
औरेलीन थिएरियोट

0

विश्व स्तर पर एनवीएम स्थापित करें
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


सृष्टि के लेखक nvm, मैं इस तीसरे पक्ष के nvm के बारे में बहुत सावधान रहूँगा ...
MrMesees

4
यह शाखा 12 आगे है, 1123 क्रिएमिक्स के पीछे है: मास्टर। यह एक समस्या है, कृपया लिंक हटाएं
MrMesees

8
यह जवाब मेरी आंखों को खून कर देता है। आपको बस कुछ भी डाउनलोड नहीं करना चाहिए और इसे sudo bash, wtf
CharlyDelta

दरअसल, इन दिनों wget कमांड समाप्त होता है | bash, कोई sudo कहीं भी नहीं है: nvm-sh / nvm: Node Version Manager
Elise van Looij

0

यह करने के लिए सबसे आसान समाधान शायद nvm.sh निष्पादन योग्य है जहाँ भी यह मारा जाएगा।

sudo /home/ubuntu/.nvm/nvm.sh install node

यह मेरे लिए ठीक काम करता है (यह मानते हुए कि इंस्टॉल पथ है)।

पूर्ण स्थापित प्रक्रिया की तरह दिखेगा

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

और फिर आप ऊपर स्थापित कमांड को नव स्थापित nvm.sh को हिट करने के लिए चला सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.