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?


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


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

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)

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.)


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.


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)


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


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


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.


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.


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


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

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)


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

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.


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


-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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.