Tidak dapat menggunakan NVM dari root (atau sudo)

104

Saya telah menyebutkan bahwa aplikasi saya menggunakan versi NodeJS yang berbeda saat dijalankan sudo.

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

Ini v0.11.8-pra menyebabkan saya beberapa masalah, jadi saya pasti tidak ingin menggunakannya, tapi aku tidak bisa mengubahnya untuk root.

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

Saya sudah mencoba menginstal nvm dari pengguna root, tetapi mendapat kesalahan "NVM sudah diinstal", tetapi nvm masih tidak ditemukan saat menjalankan dari sudo. Apa masalah saya?

Vitalii Korsakov
sumber
3
Coba sudo -s lalu instal nvm.
Game Brainiac
@GamesBrainiac Maaf, tetapi saya menulis bahwa saya telah mencoba menginstalnya dari root
Vitalii Korsakov
coba hapus /root/.nvm/ dan instal ulang nvm dari awal
Antonio E.
tidak ada /root/.nvm. Saya telah menginstal nvm dari sudo dan itu diinstal ke homedir pengguna biasa
Vitalii Korsakov
4
Ini menyelesaikan semua masalah saya karena Anda memiliki github.com/xtuple/nvm
Yoo Matsuo

Jawaban:

220

Daftar perintah di bawah ini (sumber: digitalocean ) tampaknya memperbaiki masalah

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

Perintah di atas agak rumit, tetapi yang dilakukannya hanyalah menyalin versi node apa pun yang Anda aktifkan melalui nvm ke /usr/local/direktori (di mana pengguna menginstal file global harus tinggal di VPS linux) dan mengatur izin sehingga semua pengguna dapat mengaksesnya .

Semoga ini membantu!

Venkat Selvan
sumber
7
Terima kasih, itu membantu saya.
Vishal Kumar Verma
7
Terima kasih! Ini menghemat banyak waktu saya
Quinton Pike
4
Sempurna! Terima kasih banyak.
Jean-Baptiste Louazel
2
Hebat! Tadi malam saya merusak seluruh sistem RasPi 3 saya dengan sangat mengubah izin untuk npm di semua tempat, hari ini saya menghabiskan 3 jam mencari solusi terbaik untuk menginstal node / npm secara global tanpa perlu sudo untuk setiap panggilan npm. Solusi Anda berjalan dengan baik dengan posting ini losant.com/blog/how-to-install-nodejs-on-raspberry-pi
bosch
3
Ini terdengar seperti opsi yang bagus, tetapi saya terus mendapatkan kesalahan ini: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’
trex005
129

Solusi saya adalah membuat tautan simbolik dari versi nodedan npmsaya gunakan untuk /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"

Ini membuat npmdan nodetersedia untuk semua pengguna.

SimpleJ
sumber
1
Solusi bagus. cukup tambahkan "di akhir baris kedua ... (Saya tidak dapat mengedit ini sendiri karena suatu alasan)
Rayee Roded
1
Hebat, sejauh ini ini adalah solusi terbaik. Dengan cara ini, root akan selalu menggunakan versi npm / node yang sama dengan yang Anda gunakan pada pengguna nvm, terima kasih!
luiscvalmeida
3
Solusi hebat, tetapi jika Anda mengubah versi node yang Anda gunakan, Anda harus menjalankan kembali perintah di atas.
door_number_three
4
Saya npxsering menggunakan . Jadi saya menambahkan juga:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
thomas
@SimpleJ bagaimana Anda melakukan hal yang sama untukbabel-node
pengguna566245
14

Masalah Anda adalah, itu nvmtidak di jalan saat Anda menggunakan sudo.

Jadi ketik

$ which nvm

dan hasilnya akan seperti ini

/home/abc/mynvm/nvm

Coba lagi sekarang dengan sudo:

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

Saya berasumsi Anda kemudian mengalami masalah bahwa pengguna root tidak dapat menemukan versi 0.10.13, tetapi mari kita lihat pesan kesalahan berikutnya ...

CFrei
sumber
42
which nvmtidak menghasilkan apa
Vitalii Korsakov
6
itu juga tidak menghasilkan apa-apa untuk root
Vitalii Korsakov
3
Masalahnya adalah saya tidak pernah masuk sebagai root. Kenapa harus saya? Jika saya membutuhkan akses root, saya selalu menggunakan sudo. Ya, saya dapat masuk sebagai root dan menginstal nvm, tetapi di masa mendatang saya tidak dapat menjalankannya sudo nvm use v0.10.25. Jadi saya tidak bisa menggunakan sudo nodedari pengguna juga.
Vitalii Korsakov
2
which nvmtidak pernah berhasil, bukan? nvmbukanlah sebuah eksekusi, ini adalah fungsi shell. github.com/creationix/nvm/issues/540
Matt
2
Saya baru-baru ini mengajukan pertanyaan serupa tentang di which nvmsini: stackoverflow.com/questions/49156104/… Gunakan type nvmuntuk mengungkapkan definisinya. Seperti yang dikatakan Matt, ini adalah fungsi shell.
Martin Braun
13

Alasan mendasar adalah karena nvmbukan program nyata. Ini adalah fungsi bash yang akan dimuat di pengguna .profile, .bashrcatau ... Jadi sudotidak secara otomatis mengambilnya dari $ PATH seperti kebanyakan program lainnya.

Manajer versi node alternatif adalah n: https://github.com/tj/n . Itu adalah program nyata, jadi sudoakan mengambilnya melalui $ PATH tanpa peretasan (selama sudoada /usr/local/bindi $ PATH-nya).

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
bijak
sumber
Sempurna. Terima kasih "nvm bukan masalah, tapi fungsi bash" :)
lainnya
Haha, baru menyadari tentang "masalah" salah eja saya, bukan "program";).
lain
7

Menurut README

Saat menggunakan nvm, Anda tidak perlu sudomenginstal modul secara global npm -g, jadi alih-alih melakukannya sudo npm install -g grunt, lakukan sajanpm install -g grunt

Butuh sudo npm?

Dalam kasus saya, saya memerlukan sudo npm run startakses ke beberapa file yang memerlukan akses root. Menurut masalah ini ,

Anda tidak menggunakan sudo. Anda sebaiknya chmod / chown file tersebut sehingga pengguna yang memiliki nvm memiliki akses ke file tersebut ;.

Alhasil

Pengelola nvm sangat yakin kami tidak perlu sudo: P

lzl124631x
sumber
6

Saya punya masalah Anda juga. Akhirnya saya berhasil mengatasinya. Inilah solusi saya:

  1. Copot pemasangan nvm dan nodejs. Berikut adalah beberapa tautan berguna: Penghapusan instalasi nvm . Jika Anda menginstal nodejs menggunakan apt-get, Anda dapat menghapus instalannya dengan perintah apt-get purge nodejs.
  2. Instal nvm global. Lihat halaman ini: nvm global . Seperti yang dikatakan, "Standar nvm memiliki kesulitan yang diketahui saat bekerja di lingkungan multi-pengguna atau root."

Setelah memulai ulang terminal Anda, Anda dapat menjalankan perintah sudo nvm ls.

Qianyue
sumber
1
Cabang ini 12 komit di depan, 1123 komit di belakang creationix: master. diambil langsung dari repo xtuple untuk nvm
MrMesees
6
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
pmontrasio
sumber
4

Saya telah mencoba hal yang sama pada mesin saya di mana saya juga memilikinya nvmdan saya memiliki respons yang sedikit berbeda:

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

Dugaan saya adalah Anda telah menginstal node 0.11 di luar nvm. ( Melalui manajer paket atau bahkan dari sumber )

Oleh karena itu, menjalankan node melalui sudo akan mengambil node mandiri ini sebagai gantinya.

Apakah itu masuk akal atau saya salah?

Aurélien Thieriot
sumber
Ya kamu benar. Saya telah menginstal node dan kemudian nvm . Tetapi semuanya berfungsi dengan baik untuk pengguna biasa dan tidak berfungsi untuk root.
Vitalii Korsakov
1
Oh baiklah. Kemudian, saya pikir nvm tidak dimaksudkan untuk dijalankan sebagai root. Sebenarnya saya cukup yakin bahwa menjalankan di lahan pengguna adalah fitur yang diinginkan. Namun, ini mungkin membantu Anda: github.com/creationix/nvm/issues/5
Aurélien Thieriot
Orang ini rupanya membuat nvm khusus yang berjalan dalam mode sudo: github.com/xtuple/nvm . Sayangnya hanya dalam mode sudo. Saya tidak tahu apakah itu dapat diterima
Aurélien Thieriot
0

Instal nvm secara global dengan
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash

Ricky
sumber
creationix penulis nvm, saya akan sangat berhati-hati tentang nvm pihak ketiga ini ...
MrMesees
4
Cabang ini 12 komit di depan, 1123 komit di belakang creationix: master. Ini adalah masalah, harap hapus tautannya
MrMesees
8
Jawaban ini membuat mataku berdarah. Anda seharusnya tidak mengunduh apa pun dan menjalankannya di sudo bash, wtf
CharlyDelta
Sebenarnya, perintah wget akhir-akhir ini berakhir | bash, tidak ada sudo di mana pun: nvm-sh / nvm: Node Version Manager
Elise van Looij
0

Solusi termudah untuk ini kemungkinan akan cukup dengan menekan nvm.sh yang dapat dieksekusi di mana pun itu.

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

Ini berfungsi dengan baik untuk saya (dengan asumsi itu jalur instal).

Prosedur penginstalan lengkap akan terlihat seperti ini

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"

Dan kemudian Anda dapat menjalankan perintah di atas untuk menekan nvm.sh yang baru diinstal

itchyspacesuit
sumber