ไม่สามารถใช้ NVM จากรูท (หรือ sudo)


106

ฉันได้กล่าวว่าโปรแกรมของฉันใช้รุ่นที่แตกต่างกันของ NodeJS sudoเมื่อวิ่งออกมาจาก

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

นี้v0.11.8 ก่อนทำให้ผมมีปัญหาบางอย่างดังนั้นแน่นอนผมไม่ต้องการที่จะใช้ แต่ฉันไม่สามารถเปลี่ยนได้สำหรับราก

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

ฉันพยายามที่จะติดตั้ง NVM จากผู้ใช้ราก แต่มีข้อผิดพลาด "NVM ติดตั้งอยู่แล้ว" แต่ก็ยังไม่พบ NVM sudoเมื่อวิ่งออกมาจาก ปัญหาของฉันคืออะไร?


3
ลองsudo -s แล้วnvmติดตั้ง
Games Brainiac

@GamesBrainiac ขออภัย แต่ฉันเขียนว่าฉันพยายามติดตั้งจากรูท
Vitalii Korsakov

ลองลบ /root/.nvm/ และติดตั้ง nvm ใหม่ตั้งแต่ต้น
Antonio E.

ไม่มี /root/.nvm ฉันติดตั้ง nvm จาก sudo และติดตั้งใน homedir ผู้ใช้ทั่วไป
Vitalii Korsakov

4
สิ่งนี้ช่วยแก้ปัญหาทั้งหมดของฉันได้ตามที่คุณมีgithub.com/xtuple/nvm
Yoo Matsuo

คำตอบ:


222

รายการคำสั่งด้านล่าง (ที่มา: digitalocean ) ดูเหมือนจะแก้ไขปัญหาได้

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

คำสั่งด้านบนค่อนข้างซับซ้อน แต่สิ่งที่ทำคือการคัดลอกโหนดเวอร์ชันใดก็ตามที่คุณใช้งานผ่าน nvm ไปยัง/usr/local/ไดเร็กทอรี (โดยที่ผู้ใช้ติดตั้งไฟล์ส่วนกลางควรอยู่บน linux VPS) และตั้งค่าการอนุญาตเพื่อให้ผู้ใช้ทุกคนสามารถเข้าถึงได้ .

หวังว่านี่จะช่วยได้!


7
ขอบคุณมันช่วยฉัน
Vishal Kumar Verma

7
ขอบคุณ! สิ่งนี้ช่วยฉันได้มาก
Quinton Pike

4
สมบูรณ์แบบ! ขอบคุณมาก.
Jean-Baptiste Louazel

2
สุดยอด! เมื่อคืนฉันทำลายระบบ RasPi 3 ทั้งหมดของฉันด้วยการเปลี่ยนสิทธิ์สำหรับ npm ทั่วทุกสถานที่อย่างสิ้นหวังวันนี้ฉันใช้เวลา 3 ชั่วโมงในการค้นหาวิธีที่ดีที่สุดในการติดตั้ง node / 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’
เรื่อย ๆ

134

วิธีแก้ปัญหาของฉันคือสร้างลิงก์สัญลักษณ์จากเวอร์ชันของ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
ทางออกที่ดี เพียงแค่เพิ่ม "ในตอนท้ายของบรรทัดที่สอง ... (ฉันไม่สามารถแก้ไขได้ด้วยเหตุผลบางอย่าง)
Rayee Roded

1
เยี่ยมมากนี่เป็นทางออกที่ดีที่สุด ด้วยวิธีนี้รูทจะใช้เวอร์ชัน npm / node เดียวกับที่คุณใช้กับผู้ใช้ nvm ขอบคุณ!
luiscvalmeida

3
ทางออกที่ดี แต่ถ้าคุณเปลี่ยนเวอร์ชันของโหนดที่คุณใช้คุณจะต้องรันคำสั่งข้างต้นอีกครั้ง
door_number_three

4
ฉันใช้npxค่อนข้างบ่อย ดังนั้นฉันจึงเพิ่มเข้าไปด้วย:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
thomas

@SimpleJ จะทำยังไงให้babel-node
user566245

15

ปัญหาของคุณคือที่ไม่ได้อยู่ในเส้นทางที่เมื่อคุณใช้nvmsudo

พิมพ์เลย

$ which nvm

และผลลัพธ์จะเป็นอย่างไร

/home/abc/mynvm/nvm

ลองอีกครั้งโดยใช้sudo:

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

ฉันถือว่าคุณพบปัญหาที่ผู้ใช้รูทไม่พบเวอร์ชัน 0.10.13 แต่ให้ดูข้อความแสดงข้อผิดพลาดถัดไป ...


43
which nvmไม่มีผลอะไรเลย
Vitalii Korsakov

6
มันไม่มีผลอะไรเลยสำหรับรูทเช่นกัน
Vitalii Korsakov

3
ปัญหาคือฉันไม่เคยล็อกอินในฐานะรูท ทำไมฉันต้อง? ถ้าฉันต้องเข้าถึงรากใด ๆ sudoฉันมักจะใช้ ใช่ฉันสามารถเข้าสู่ระบบในฐานะรูทและติดตั้ง nvm ได้ แต่ในอนาคตฉันไม่สามารถรันsudo nvm use v0.10.25ได้ เลยใช้sudo nodeจาก user ไม่ได้เช่นกัน
Vitalii Korsakov

2
which nvmไม่เคยทำงานใช่ไหม nvmไม่ใช่ปฏิบัติการ แต่เป็นฟังก์ชันเชลล์ github.com/creationix/nvm/issues/540
แมตต์

2
ฉันเพิ่งถามคำถามที่คล้ายกันเกี่ยวกับwhich nvmที่นี่: stackoverflow.com/questions/49156104/…ใช้type nvmเพื่อเปิดเผยคำจำกัดความ อย่างที่ Matt บอกว่ามันเป็นหน้าที่ของเชลล์
Martin Braun

13

เหตุผลพื้นฐานเป็นเพราะnvmไม่ใช่โปรแกรมจริง มันเป็นฟังก์ชั่นที่ได้รับการทุบตีในการโหลดของผู้ใช้.profile, .bashrcหรือ ... ดังนั้นsudoไม่ได้โดยอัตโนมัติหยิบมันขึ้นมาจาก $ PATH เหมือนโปรแกรมอื่น ๆ ส่วนใหญ่

ผู้จัดการโหนดรุ่นทางเลือกคือn: https://github.com/tj/n นั่นเป็นโปรแกรมจริงดังนั้นsudoจะรับผ่าน $ PATH โดยไม่ต้องแฮ็กใด ๆ (ตราบเท่าที่sudoมี/usr/local/binใน $ PATH)

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

สมบูรณ์แบบ. ขอบคุณ "nvm ไม่ใช่ปัญหา แต่เป็นฟังก์ชันทุบตี" :)
อีก

ฮ่า ๆ เพิ่งรู้เกี่ยวกับ "ปัญหา" ของฉันที่สะกดผิดแทนที่จะเป็น "โปรแกรม";)
อีก

8

อ้างอิงจากREADME

เมื่อใช้ nvm คุณไม่จำเป็นต้องsudoติดตั้งโมดูลทั่วโลกด้วยnpm -gดังนั้นแทนที่จะทำsudo npm install -g gruntแทนnpm install -g grunt

ต้องการ sudo npm?

ในกรณีของฉันฉันจำเป็นต้องsudo npm run startเข้าถึงไฟล์บางไฟล์ที่ต้องการการเข้าถึงรูท ตามปัญหานี้ ,

sudoคุณไม่ได้ใช้ คุณควร chmod / chown ไฟล์แทนเพื่อให้ผู้ใช้ที่มี nvm สามารถเข้าถึงไฟล์ได้

ในผลรวม

ผู้ดูแล nvm เชื่อเป็นอย่างยิ่งว่าเราไม่จำเป็นต้องsudo: P


6

ฉันก็มีปัญหาของคุณเหมือนกัน ในที่สุดฉันก็ได้แก้ไขมัน นี่คือทางออกของฉัน:

  1. ถอนการติดตั้ง nvm และ nodejs นี่คือบางส่วนเชื่อมโยงที่เป็นประโยชน์: ถอนการติดตั้งของ NVM หากคุณติดตั้ง nodejs ใช้ apt-get apt-get purge nodejsคุณสามารถถอนการติดตั้งด้วยคำสั่ง
  2. ติดตั้ง global nvm ดูหน้านี้: NVM ทั่วโลก ตามที่กล่าวไว้ว่า "nvm มาตรฐานพบปัญหาในการทำงานในหลายผู้ใช้หรือสภาพแวดล้อมที่รูท"

หลังจากที่เริ่มต้น terminal sudo nvm lsของคุณคุณสามารถเรียกใช้คำสั่ง


2
สาขานี้อยู่ข้างหน้า 12 ครั้ง, 1123 กระทำหลังการสร้างนิกซ์: หลัก นำมาจาก xtuple repo สำหรับ nvm
MrMesees


4

ฉันได้ลองสิ่งเดียวกันกับเครื่องของฉันที่ฉันมีnvmเช่นกันและฉันได้รับการตอบสนองที่แตกต่างกัน:

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

ฉันเดาว่าคุณได้ติดตั้งโหนด 0.11 นอก nvm ( ผ่านตัวจัดการแพ็คเกจหรือจากแหล่งที่มา )

ดังนั้นการรันโหนดผ่าน sudo จะรับโหนดแบบสแตนด์อโลนนี้แทน

มันสมเหตุสมผลหรือว่าฉันเข้าใจผิด?


ใช่คุณถูก. ผมได้ติดตั้งโหนดแล้วNVM แต่ทุกอย่างทำงานได้ดีสำหรับผู้ใช้ปกติและไม่ทำงานสำหรับรูท
Vitalii Korsakov

1
โอ้ไม่เป็นไร จากนั้นฉันคิดว่า nvm ไม่ได้ถูกเรียกใช้เป็นรูท ในความเป็นจริงฉันค่อนข้างสวยที่การทำงานในที่ดินของผู้ใช้เป็นคุณสมบัติที่ต้องการ อย่างไรก็ตามสิ่งนี้อาจช่วยคุณได้: github.com/creationix/nvm/issues/5
Aurélien Thieriot

ผู้ชายคนนี้เห็นได้ชัดว่าทำ NVM พิเศษที่ทำงานในโหมด sudo: github.com/xtuple/nvm น่าเสียดายที่อยู่ในโหมด sudo เท่านั้น ฉันไม่รู้ว่ามันยอมรับได้หรือเปล่า
Aurélien Thieriot

0

ติดตั้ง nvm ทั่วโลกด้วย
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


ผู้เขียน creationix 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 ที่ติดตั้งใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.