nvm terus "melupakan" simpul dalam sesi terminal baru

546

Setelah menggunakan sesi terminal baru di OS X, nvmlupa versi node dan default ke nothing:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Saya harus terus memukul nvm use v.0.11.13di setiap sesi:

         .nvm
     v0.11.12
->   v0.11.13

Saya sudah mencoba keduanya brewmenginstal, serta skrip instalasi resmi.

Saya .profileuntuk versi buatan:

#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

Dan untuk skrip install.sh:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash

#nvm
export NVM_DIR="/Users/farhad/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Adakah petunjuk tentang apa yang saya lakukan salah?

frhd
sumber
1
Hanya ingin menambahkan ini di sini - Pastikan Anda mengekspor dari .bash_profiledan bukan milik Anda.bashrc
James111

Jawaban:

1181

Coba nvm alias default. Sebagai contoh:

$ nvm alias default 0.12.7

Ini menetapkan versi simpul default di shell Anda. Kemudian verifikasi bahwa perubahan berlanjut dengan menutup jendela shell, membuka yang baru, lalu: node --version

pewarna
sumber
11
Bukankah ini sudah merupakan pekerjaan penggunaan nvm? Setelah $ nvm alias default 0.11.13dan $ nvm use 0.11.12, saya mengerti node --version = 0.11.12. Namun, dalam sesi baru, simpul hilang lagi. Di debian, saya tidak memiliki masalah ini sama sekali.
frhd
4
Oke, Ive telah salah ketik: nvm alias defaul X. Dengan penggunaan yang tepat itu benar-benar berfungsi. Jadi alur kerjanya nvm install Xsaat itu nvm alias default X, saya kira. Terima kasih telah membantu!
frhd
21
Saya memiliki masalah yang sama dan itu karena saya mengekspor NVM_DIRsetelahnya nvm.sh. Pastikan untuk mengekspor NVM_DIRsebelumnya.
maxwell2022
11
Catatan yang nvm alias defaulttidak mengatur versi simpul untuk lingkungan saat ini, hanya untuk semua yang baru.
ericsoco
28
Jika itu tidak berhasil, pastikan di .bash_profile(atau .bashrcatau apa pun) Anda, Anda tidak memiliki apa pun memodifikasi PATHsetelahsource xx/nvm.sh
goodmanship
85

Alias ​​untuk nodedirinya sendiri untuk menghindari memperbarui alias default bersama dengan pembaruan versi node nanti.

nvm alias default node
Tarun
sumber
2
! PERINGATAN: Versi 'simpul' tidak ada. default -> node (-> N / A)?
House3272
6
Bagaimana dengan node alias default stable?
Pierre Henry
1
Saya tidak berpikir Anda ingin menggunakan stablelagi. Dari nvm docs: "stable: alias ini sudah usang, dan hanya benar-benar berlaku untuk simpul v0.12 dan sebelumnya. Saat ini, ini adalah alias untuk simpul."
pherris
1
Ke mana nodestandarnya? Node diinstal dan digunakan oleh NVM di shell saat ini, atau Node mungkin diinstal pada sistem oleh paket instalasi Node atau Homebrew dll?
2540625
7
(Pemelihara nvm di sini) node(dan stable, tetapi semua yang dirilis dalam semver stabil, jadi itu sekarang kata yang tidak berguna) menggunakan versi terbaru yang tersedia. Untuk perintah lokal, terinstal terbaru; untuk perintah jarak jauh, terbaru tersedia.
LJHarb
40

Untuk menginstal versi stabil terbaru:

nvm install stable

Untuk menetapkan default ke versi stabil (alih-alih versi tertentu):

nvm alias default stable

Untuk daftar versi yang diinstal:

nvm list

Pada v6.2.0, akan terlihat seperti:

$ nvm list
         v4.4.2
->       v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)
ohho
sumber
Ini berfungsi dengan baik dan saran untuk digunakan nvm listmembantu pengguna memvisualisasikan apa yang terjadi dengan versi mereka. Terima kasih!
Solvitieg
30

Dalam kasus saya, program lain telah menambahkan PATHperubahan ke.bashrc

Jika program lain mengubah inisialisasi PATH setelah nvm, maka PATHperubahan nvm akan dilupakan, dan kita akan mendapatkan simpul sistem pada simpul kita PATH(atau tidak ada simpul).

Solusinya adalah untuk memindahkan setup nvm ke bawah dari.bashrc

### BAD .bashrc ###

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

Larutan:

### GOOD .bashrc ###

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

(Ini dengan bash 4.2.46 di CentOS. Bagiku seperti bug di bash, tapi aku mungkin salah.)

joeytwiddle
sumber
1
Ini membantu saya! Default macet.
Redsandro
1
Beri dia medali! Saya memiliki tambahan memuat file * * rc lainnya di zshrc saya setelah ekspor NVM_DIR itu membuat saya gila. Terima kasih!
bobbytables
Terima kasih! Ini membuatku gila.
Pohon
27

nvm melakukan tugasnya dengan mengubah variabel PATH, jadi Anda perlu memastikan bahwa Anda tidak mengubah PATH Anda dengan sesuatu yang lain setelah sumber skrip nvm.sh.

Dalam kasus saya, nvm.sh dipanggil dalam .bashrc tetapi kemudian variabel PATH semakin diperbarui dalam .bash_profile yang menyebabkan sesi saya menemukan simpul sistem sebelum simpul nvm.

Jeff Mikels
sumber
1
bagaimana saya bisa memeriksanya? Saya curiga inilah masalahnya.
Mild Fuzz
ini kasus saya terima kasih! saya sedang mengatur ekspor di atas pada file .zshrc saya, cukup pindahkan ke bawah dan masalahnya telah diselesaikan
Alejandro Silva
Itu kasus saya. Solusi adalah memindahkan entri NVM ~ / .bash_profile ke akhir file + set nvm alias defaultdan nvm useke versi yang saya butuhkan.
Eugene Tartakovsky
Ini solusi bagi saya. Pindah berikut ke bawah .bashrc: export NVM_DIR="$HOME/.nvm"kemudian. "/usr/local/opt/nvm/nvm.sh"
asmiller
10

Solusi berperingkat teratas sepertinya tidak berfungsi untuk saya. Solusi saya di bawah ini:

  1. Copot nvm sepenuhnya menggunakan homebrew:brew uninstall nvm
  2. Pasang kembali brew install nvm
  3. Di Terminal, ikuti langkah-langkah di bawah ini (ini juga terdaftar saat menginstal nvm melalui homebrew):

    mkdir ~ / .nvm cp $ (buatan --prefix nvm) / nvm-exec ~ / .nvm / ekspor NVM_DIR = ~ / .nvm sumber $ (buatan --prefix nvm) /nvm.sh

Langkah-langkah yang diuraikan di atas akan menambahkan direktori kerja NVM ke jalur $ HOME Anda, salin nvm-exec ke direktori kerja NVM dan tambahkan ke $ HOME / .bashrc, $ HOME / .zshrc, atau file konfigurasi setara shell Anda. (Kembali diambil dari whats terdaftar pada instalasi NVM menggunakan homebrew)

Joe
sumber
7

Jika Anda telah mencoba semuanya masih tidak berhasil Anda dapat mencoba ini: _

1 -> Copot NVM

rm -rf ~/.nvm

2 -> Hapus dependensi npm dengan mengikuti ini

3 -> Instal NVM

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

4 -> Atur ~/.bash_profilekonfigurasi

Lari sudo nano ~/.bash_profile

Salin dan tempel mengikuti ini

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

5 -> CONTROL + Xsimpan perubahan

6 -> Jalankan . ~/.bash_profile

7 -> Sekarang Anda harus sudah nvmmenginstal pada mesin Anda, untuk menginstal node run nvm install v7.8.0ini akan menjadi versi node default atau Anda dapat menginstal versi node apa pun

Gabbar
sumber
1
Terima kasih banyak! Ini adalah satu-satunya solusi yang menetapkan jalur simpul di bash juga dan bekerja untuk saya. Saya hanya menggunakan "nvm install node" untuk menginstal versi node terbaru daripada menggunakan "nvm install v7.8.0"
user3492435
5

Pertanyaan ini telah disebutkan untuk OSX, tetapi itu terjadi pada saya di OS linux saya. Saya mencoba menggunakan nvm alias default <version>tetapi untuk setiap sesi terminal baru versi node yang digunakan dilupakan. jadi, inilah solusi yang saya temukan.

pastikan untuk menetapkan alias default untuk versi simpul , masukkan kode berikut dalam .bashrc, dan source .bashrc.

export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
    ## Source it
    source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH

tautan solusi deskriptif

suparno majumder
sumber
1
Hanya sebuah catatan, ini bergantung pada termasuk vdalam versi saat mengatur remote. Misalnya v4.2.4bukannya 4.2.4.
Vaughan
4

Melakukan nvm install 10.14, misalnya, akan nvm useversi untuk sesi shell saat ini tetapi akan tidak selalu mengaturnya sebagai default untuk sesi masa depan seperti yang Anda harapkan. Versi simpul yang Anda dapatkan di sesi shell baru ditentukan oleh nvm alias default. Yang membingungkan, nvm installhanya akan mengatur alias default jika belum disetel. Untuk mendapatkan perilaku yang diharapkan, lakukan ini:

nvm alias default ''; nvm install 10.14

Ini akan memastikan bahwa versi itu diunduh, menggunakannya untuk sesi saat ini dan menjadikannya sebagai default untuk sesi mendatang.

Denis Howe
sumber
3

jalankan ini setelah Anda menginstal versi apa pun,

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

Perintah ini menyalin versi node apa pun yang telah Anda aktifkan melalui nvm ke direktori / usr / local / dan mengatur izin sehingga semua pengguna dapat mengaksesnya.

Mouafa Ahmed
sumber
Saya akan merekomendasikan menggunakan &&s alih-alih ;dalam perintah itu. Jika whichgagal menemukan simpul, kami tidak ingin melanjutkan ke chmod /bin/*!
joeytwiddle
3

Saya telah menemukan cara baru di sini. Menggunakan n Interactively Manage Your Node.js membantu.

Harshit Garg
sumber
Iya! Tidak yakin apakah itu karena saya menggunakan fishshell, tetapi jawaban yang diterima tidak bekerja untuk saya. nberhasil!
clozach
2

Saya menggunakan ZSH jadi saya harus memodifikasi ~/.zshrcdengan garis mengenai NVM dalam urutan itu:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh
Matt Walterspieler
sumber
1
$ nvm alias default {NODE_VERSION}

ketika kita menggunakan perintah di atas, hanya memperbarui versi node tetapi npmmasih menggunakan versi yang lama.

Berikut adalah solusi lain untuk memperbarui keduanya nodedan npm, dalam kasus saya saya ingin menggunakan simpul 8.9.4dan saya telah menggunakan perintah di bawah ini.

$ nvm use default 8.9.4

Dan perintah mengembalikan output.

Sekarang menggunakan simpul v8.9.4 (npm v5.6.0)

Anish Agarwal
sumber
0

Jika Anda juga memiliki SDKMAN ...

Entah bagaimana SDKMAN bertentangan dengan NVM saya. Jika Anda kehabisan akal dan ini masih belum bisa dipecahkan, saya hanya memperbaikinya dengan mengabaikan "INI HARUS DI AKHIR FILE ..." dari SDKMAN dan meletakkan garis NVM setelahnya.

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
ituDrew
sumber
0

Saya menghadapi masalah yang sama saat menggunakan terminal terintegrasi dalam editor VS Code. Restart VS Code setelah mengubah versi node menggunakan nvm memperbaiki masalah untuk saya.

RS1879
sumber
0

Ini adalah instruksi sederhana:

1) Pasang:

nvm install 8.10.0

2) Gunakan sekali per terminal

nvm use 8.10.0

3) Atur sebagai standar untuk semua terminal

nvm alias default 8.10.0

Anda mungkin perlu menggunakan izin root untuk melakukan tindakan itu.

Dan jangan lupa untuk memeriksa dokumentasi nvm untuk info lebih lanjut.

Perhatikan juga bahwa Anda mungkin perlu menentukan versi simpul untuk IDE Anda: masukkan deskripsi gambar di sini

Arseniy-II
sumber
-2

Juga jika Anda memiliki simpul yang diinstal sebelum nvm periksa ~ / .bash_profile Anda untuk tidak memiliki sesuatu seperti:

export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH

Jika Anda memilikinya, komentar / hapus dan nvm harus mulai menangani versi simpul default.

Tibbus
sumber
Mengatur variabel jalur tidak ada hubungannya dengan pemilihan versi nvm, tentunya?
sn0r
nvm.sh harus memodifikasi PATH Anda setelah Anda mengaturnya (misalnya dengan yang di atas). Ini membiarkan nvm meletakkan direktori versinya di depan / usr / local / bin tempat versi "system" dari node hidup.
Denis Howe
-3

Setelah lama berselisih dengan masalah ini, saya menemukan cara memperbaikinya. Berikut ini adalah solusi langkah demi langkah untuk masalah ini:

  • Buka terminal & Instal alat pengembang baris perintah:

    xcode-select --install

  • Tekan enter

  • Pasang NVM versi terbaru:

    cd ~/

  • Tekan enter

    git clone https://github.com/creationix/nvm.git .nvm

  • Tekan enter
  • Jika Anda sudah membuat folder .nvm sebelumnya, Anda akan melihat pesan kesalahan berikutnya:

    fatal: destination path '.nvm' already exists and is not an empty directory.

    Lain, Anda akan melihat proses kloning berjalan sampai selesai.

  • Lihat versi NVM terbaru:

    cd ~/.nvm

  • Tekan enter

    git checkout v0.34.0

    Anda akan mendapatkan respons yang mirip dengan:

    HEAD is now at 3d9c31d v0.34.0

    Versi mungkin berbeda pada sistem yang berbeda.

    ls

  • Tekan enter

    . nvm.sh

  • Tekan enter

    nvm list

  • Tekan enter

    Anda akan melihat versi node yang berbeda diinstal pada mesin Anda, mungkin ada beberapa kesalahan, jangan beri mereka perhatian.

    nvm ls-remote | tail -n9

  • Tekan enter

    nvm list

  • Buka bash menggunakan vim:

    vim ~/.bash_profile

  • Di dalam editor vim tekan: iuntuk masuk INSERT modedan memulai baris baru. Jika Anda memiliki kesalahan saat mengedit, tekan ESCtombol lalu :q!keluar tanpa menyimpan.

    export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

  • Tekan ESCtombol ketika Anda selesai mengedit file (Anda akan melihat mode INSERT menghilang).

  • Tekan :wquntuk menyimpan file.
  • Tekan enter

    nvm ls-remote | tail -n9

  • Tekan enter dan instal versi nvm terbaru yang disajikan:

    nvm install 12.6.0

  • Saat proses selesai Anda akan melihat: Now using node v12.6.0 (npm v6.9.0)

  • Anda dapat memeriksa apakah instalasi berhasil dengan menekan:

    node -vatau npm -v, ia akan menunjukkan kepada Anda versi nvm dan npm yang terinstal di sistem Anda.

Eden Sharvit
sumber