nvm tidak kompatibel dengan opsi "prefix" konfigurasi npm:

208

Saya mencoba menjalankan versi NodeJS lain dengan nvmtetapi mendapatkan kesalahan ini:

$ nvm use v4.2.4

nvm is not compatible with the npm config "prefix" option: 
   currently set to "/Users/z/.npm-global"
Run `npm config delete prefix` or `nvm use --delete-prefix v4.2.4` to unset it.

Saya memiliki awalan yang sengaja saya hindari sudo npm(lihat https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Apakah ada cara yang bisa saya gunakan nvmtanpa kehilangan awalan untuk paket yang diinstal secara global?

Dmitri Zaitsev
sumber
Saya menggunakan awalan penghapusan konfigurasi npm untuk mengatasi ini, tidak ada masalah sejauh ini
ggdx
@ DanWhite Jika saya menghapus awalan, saya kehilangan pengalihan instalasi global saya ke direktori khusus.
Dmitri Zaitsev
5
(Pemelihara nvm di sini) Itulah intinya. Dengan nvm, ia, bukan Anda, yang mengelola instalasi global Anda. Secara terpisah, pemasangan global tidak boleh dibagi di seluruh versi node.
LJHarb
2
Setiap salinan node dilengkapi dengan npm sendiri, yang menentukan pengaturannya sendiri.
LJHarb
1
Memang, setiap versi simpul yang dipilih dengan nvm adalah per-shell - itu dengan desain.
LJHarb

Jawaban:

379

Hapus dan Reset awalan

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

Catatan: Ubah nomor versi dengan yang ditunjukkan dalam pesan kesalahan.

nvm tidak kompatibel dengan opsi npm config "prefix": saat ini disetel ke "/ usr / local" Run "npm config hapus prefix" atau "nvm use --delete-prefix v6.11.1 --silent" untuk menghapusnya.


Kredit ke @gabfiocchi di Github - "Anda harus menimpa awalan nvm"

Mick
sumber
10
Ini bekerja seperti pesona! Baru saja ambil versi node saya.
Sirius_B
Saya tampaknya memiliki tautan simbolik / usr / local / bin / node yang akan menyebabkan terminal terintegrasi dalam vscode untuk melihat versi simpul yang seharusnya tidak terlihat. Mengikuti langkah-langkah di atas dan kemudian menghapus tautan simbolik tampaknya telah menyelesaikan masalah. Node dan npm saya diatur oleh nvm sekarang
Sudhanshu Mishra
ini bekerja dengan sempurna. hanya saja jangan ketinggalan untuk mengatur awalan versi node, Anda akan menggunakan. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Ini hanya berfungsi di jendela saat ini. Jika Anda membuka shell baru atau jendela baru, Anda harus mengulanginya lagi.
jtiscione
3
Saya harus melakukan ini secara berurutan. 1. penggunaan nvm --delete-prefix vx.xx --silent 2. konfigurasi npm menghapus awalan 3. konfigurasi npm mengatur awalan $ NVM_DIR / versi / node / vx.xx
Guangtong Shen
66

Saya memiliki masalah yang sama dan pelaksanaan npm config delete prefixtidak membantu saya.

Tapi ini berhasil:

Setelah menginstal nvm menggunakan minuman, buat ~/.nvmdirektori:
$ mkdir ~/.nvm

dan tambahkan baris berikut ke ~/.bash_profile:

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

(Pastikan Anda tidak memiliki perintah terkait nvm lainnya di ~/.bashrcatau ~/.profileatau ~/.bash_profile)

Buka terminal baru dan kali ini tidak boleh mencetak pesan peringatan.
Periksa apakah nvm berfungsi dengan menjalankan nvm --versionperintah.
Setelah itu, instal / instal ulang NodeJS menggunakan nvm install node && nvm alias default node.

Info lebih lanjut

Saya menginstal nvmmenggunakan homebrewdan setelah itu saya mendapat notifikasi ini:

Harap dicatat bahwa upstream telah meminta kami untuk membuat pengelolaan nvm secara eksplisit melalui Homebrew tidak didukung oleh mereka dan Anda harus memeriksa masalah apa pun terhadap metode pemasangan nvm standar sebelum pelaporan.

Anda harus membuat direktori kerja NVM jika tidak ada:

 mkdir ~/.nvm

Tambahkan berikut ini ke ~/.bash_profileatau file konfigurasi shell yang Anda inginkan:

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

Anda dapat mengatur $NVM_DIRke lokasi mana pun, tetapi membiarkannya tidak berubah /usr/local/Cellar/nvm/0.31.0akan menghancurkan instalasi Node yang diinstal nvm saat memutakhirkan / instal ulang.

Mengabaikannya membawa saya ke pesan kesalahan ini:

nvmtidak kompatibel dengan opsi npm config"awalan": saat ini diatur ke "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Jalankan nvm use --delete-prefix v5.7.1 --silentuntuk menghapusnya.

Saya mengikuti panduan sebelumnya (dari homebrew/nvm) dan setelah itu saya menemukan bahwa saya perlu menginstal ulang NodeJS. Jadi saya melakukannya:

nvm install node && nvm alias default node

dan itu diperbaiki.

Pembaruan: Menggunakan brew untuk menginstal NVM menyebabkan lambatnya permulaan Terminal. Anda dapat mengikuti instruksi ini untuk menyelesaikannya.

SMMousavi
sumber
6
nvm alias default nodetampaknya membantu saya dalam kasus saya
mirkobrankovic
28
(pengelola nvm di sini) nvmtidak didukung ketika diinstal melalui minuman. Copot pemasangannya dan gunakan metode yang tepat, skrip ikal di readme.
LJHarb
3
Saya menggunakan skrip ikal untuk menginstal nvm. Jawaban ini tidak berhasil untuk saya.
intcreator
1
@intreator Terima kasih. Saya akhirnya melakukan instalasi simpul baru lengkap menggunakan nvm berdasarkan panduan ini: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm Dan hangup saya berakhir dengan yang saya miliki sebelumnya diinstal menggunakan homebrew, yang tidak lagi didukung. Itu meninggalkan banyak sisa yang perlu beberapa saat untuk dibersihkan, dan kemudian saya harus rm -rf node_modulesdan lari npm installlagi, karena direktori sudah memiliki masalah izin edan.
Jake T.
1
Untuk kejelasan keturunan, saya harus melakukan brew remove node -f, yang menghapus semua versi yang diinstal. Lakukan ini dulu, kemudian ikuti panduan di tautan saya di atas, lalu hapus node_modules. Anda harus mendapatkan instalasi yang bersih! Saya pikir Anda kemudian harus menginstal npm juga, yang saya ikuti petunjuk dari artikel nodejs.org yang muncul ketika saya mencarinya. npm install npm@latest -gadalah perintah, setelah Anda menginstal node.
Jake T.
31

Ini mungkin konflik dengan instalasi Node lokal Anda (jika Anda menginstalnya dengan cara lain selain NVM di masa lalu). Anda harus menghapus instance node ini:

  1. hapus node_modules sudo rm -rf /usr/local/lib/node_modules
  2. hapus simpul sudo rm /usr/local/bin/node
  3. hapus tautan simpul cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Setelah Anda tidak dapat menginstal nvm

Penyembuh
sumber
9
Apakah Anda ingin menambah jawaban hanya kode Anda dengan beberapa penjelasan? Komentar tidak cukup, karena perintah Anda lebih rumit daripada yang dijelaskan oleh mereka. Jelaskan mengapa perincian jawaban Anda memecahkan masalah. Bandingkan jawaban Anda dengan jawaban tahun sebelumnya. Apa yang menjadikan jawaban Anda sebagai nilai tambah untuk pertanyaan ini?
Yunnosch
Bagi saya, baris kode pertama yang kosong (yang baru-baru ini Anda tambahkan) membutuhkan penjelasannya sendiri ...
Yunnosch
Setelah lima bulan di StackOverflow, pertimbangkan untuk mengikuti tur bantuan berpemandu yang sangat mencerahkan .
Yunnosch
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Tolong juga cobalah untuk tidak membuat kerumunan kode Anda dengan komentar penjelasan, ini mengurangi keterbacaan kode dan penjelasan!
Filnor
"Setelah Anda tidak dapat menginstal nvm" Jadi, jika tujuan saya adalah menggunakan nvm, saya seharusnya tidak melakukan ini?
Jake T.
18

Kesalahan ini dapat terjadi ketika jalur folder instalasi NVM Anda memiliki Tautan Simbolik .

Penjelasan

Jalur instalasi default NVM adalah: $HOME/.nvmtetapi folder rumah Anda bisa menjadi tautan simbolis untuk drive lain, seperti kasus saya.

Contoh, folder rumah saya adalah Tautan Simbol ke drive lain:

/home/myuser -> /bigdrive/myuser

Ini menyebabkan masalah awalan.

Larutan

Pada skrip startup Anda (.bashrc atau .zshrc atau lainnya), ubah folder NVM ke jalur langsung.

Ex: NVM_DIR="/bigdrive/myuser/.nvm".

.bashrc

export NVM_DIR="/bigdrive/myuser/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
André Avelar
sumber
Terima kasih! Jawaban Anda harus memiliki lebih banyak visibilitas
ben
Nggak. Saya menggoreng otak saya untuk memahami kesalahan gila ini. Saya tidak menemukan pos yang membantu saya. Saya harus berjuang keras untuk menyelesaikan masalah. Saya senang membantu Anda. Pilih jawaban saya agar lebih terlihat.
André Avelar
echod saya $ NVM_DIR adalah "/ Pengguna / vijayshanker/.nvm" haruskah saya meletakkan "ekspor NVM_DIR =" / Pengguna / vijayshanker / .nvm (dan sisanya) "di bashrc, mencoba tetapi masih tidak memperbaikinya, telah berjuang untuk 6 jam, tolong bantu dicatat: saya tidak menginstal npm, saya tidak menginstal node saya dari npm
vijay shanker
satu solusi mungkin untuk mengekspor NVM_DIR = $ (readlink -f "$ HOME / .nvm") di .bashrc atau baris perintah. Ini akan menghapus semua symlink dari $ HOME / .nvm dan mengekspor path lengkap polos dengan hanya direktori nyata.
Nimlar
10

Saya berlari ke ini saat menggunakan node diinstal melalui nvm, dengan nvmdiinstal melalui homebrew. Saya menyelesaikannya dengan menjalankan brew uninstall nvm,, rm -rf $NVM_DIRkemudian menginstal ulang nvm menggunakan skrip instalasi resmi dan menginstal ulang versi node yang saya butuhkan.

Catatan: Saya juga telah $NVM_DIRmemasang dan symlink. Saya memindahkannya kembali ke homedir saya.

Lane Rettig
sumber
9

Mungkin masalahnya jika Anda memiliki direktori home Anda terpasang di suatu tempat, karena nvm tidak berfungsi dengan baik dengan symlink. Karena saya tidak peduli di mana letak $ NVM_DIR saya, saya menjalankan ini dan semua berfungsi dengan baik:

$ mv ~/.nvm /tmp/
$ export NVM_DIR="/tmp/.nvm"
$ nvm use --delete-prefix v6.9.1
James May
sumber
6

masukkan deskripsi gambar di siniSaya memiliki masalah yang sama dan itu sangat mengganggu setiap kali dengan terminal. Saya menjalankan perintah ke terminal dan sudah diperbaiki

Bagi mereka mencoba untuk menghapus nvm dari minuman

mungkin tidak cukup hanya dengan membongkar instalan nvm

jika Anda melihat awalan npm masih / usr / lokal, jalankan perintah ini

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin ,share/man}/{npm*,node*,man1/node*}

Panayiotis Georgiou
sumber
4

Saya memiliki pesan kesalahan yang sama tetapi solusi lain. Jalur autogenerated selama curl (install.sh) tidak cocok. Periksa ini dengan:

echo $NVM_DIR

Dalam kasus saya: /var/www//.nvm. Perlihatkan di file bash yang dibuat secara otomatis dan ubah dan ganti:: ~ / .bash_profile, ~ / .zshrc, ~ / .profile, atau ~ / .bashrc)

menggantikan

export NVM_DIR="$HOME/.nvm"

dengan (misalnya)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
sumber
Datang ke sini untuk memberikan komentar yang sama :) Dalam kasus saya adalah karena ketika saya membuat pengguna saya mengatur rumah sebagai useradd --home / home / user / dengan trailing / saya dihapus dari file / etc / passwd dan semuanya mulai bekerja lagi
Israel
1

Saya mengikuti https://stackoverflow.com/a/47861348/2391795 jawaban tetapi tidak berhasil dengan baik.

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

Setelah menjalankan perintah yang disarankan nvm saya tidak berfungsi lagi, menjalankan nvm useakan menampilkan versi node yang tepat digunakan, tetapi menjalankan node -vakan menunjukkan yang lain. Tidak mungkin mengubah versi node lagi.

Saya mencopot dan menginstal ulang nvm sepenuhnya untuk memperbaikinya. Saya mengikuti https://github.com/creationix/nvm#manual-uninstall dengan menjalankan

$ rm -rf "$NVM_DIR"

Kemudian diedit saya .zshrcuntuk menghapus baris yang berkaitan dengan nvm, yang dalam kasus saya adalah

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"

Kemudian mulai shell baru (sehingga nvm tidak dimuat di shell baru ini) dan berlari https://github.com/creationix/nvm#install-script

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

Yang menambahkan nvm baris saya sebelumnya telah dihapus di blog saya .zshrc .

Kemudian saya bisa menggunakan nvm seperti dulu. Saya kira itu adalah kasus aneh jika ada yang tidak beres dan memaksa saya untuk menginstal ulang semuanya, sepertinya sebagian besar orang tidak mengalami hal ini karena masalah ini.

Vadorequest
sumber
1

Biarkan saya menggambarkan situasi saya.

Pertama, periksa konfigurasi saat ini

$ nvm use --delete-prefix v10.7.0
$ npm config list

Kemudian, saya menemukan konfigurasi kesalahan dalam output:

; project config /mnt/c/Users/paul/.npmrc
prefix = "/mnt/c/Users/paul/C:\\Program Files\\nodejs"

Jadi, saya menghapus C:\\Program Files\\nodejsdi /mnt/c/Users/paul/.npmrc.

Paul Han
sumber
1

Saya memecahkan masalah ini ketika ditunjukkan pada Terminal VSCode dan JetBrains, tetapi tidak di terminal asli menggunakan perintah berikut:

ls -la /usr/local/bin | grep "np[mx]"

Ini akan memberi Anda jalan yang diselesaikan di akhir:

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

Dari sana, menghapus file dan meluncurkan kembali VS Code akan memperbaiki masalah:

rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm -R /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

perbaiki tautan: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
sumber
0

Saya sedang mencari solusi untuk masalah awalan nvm yang menemukan pertanyaan ini (sebelum menemukan solusi). Inilah "dialog" shell saya. Semoga bermanfaat bagi seseorang. Saya dapat menetapkan awalan dengan bantuan pos ini: https://github.com/npm/npm/issues/6592

Ketika saya mencoba npm config delete prefixatau nvm use --delete-prefixsebelum menggunakan npm --prefix="" set prefix "", saya hanya mendapat: npm ERR! bukan kode 0

Perhatikan bahwa Anda harus mengulangi prosedur yang sama dengan setiap versi node, awalan diatur kembali ke (dalam kasus saya) / usr / local setelah instalasi.

    $ nvm install 0.10
    ######################################################################## 100.0%
    nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ npm --prefix="" set prefix ""
    $ nvm use 0.10.44
    nvm is not compatible with the npm config "prefix" option: currently set to "/home/john"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ nvm use --delete-prefix v0.10.44
    Now using node v0.10.44 (npm v1.3.10)
    $ nvm ls
    v0.10.44
             v4.4.3
    ->       system
    default -> 4.4.3 (-> v4.4.3)
    node -> stable (-> v4.4.3) (default)
    stable -> 4.4 (-> v4.4.3) (default)
    iojs -> N/A (default)
    $ npm config get prefix
    /usr/local
vSurfer
sumber
0

Saya mengalami masalah ini setelah memindahkan folder rumah saya ke drive baru di linux. Itu diperbaiki dengan menghapus folder .nvm dan menginstal ulang nvm

Pablo Mescher
sumber
0

Baru saja menyelesaikan masalah. Saya terhubung $HOME/.nvmke $DEV_ZONE/env/node/nvmdirektori. Saya menghadapi masalah yang sama. Aku diganti NVM_DIRdi $HOME/.zshrcsebagai berikut

export NVM_DIR="$DEV_ZONE/env/node/nvm"

BTW, silakan instal NVM menggunakan curlatau wgetperintah tidak dengan menggunakan brew. Untuk lebih lanjut silakan periksa komentar dalam edisi ini di Github: 855 # issuecomment-146115434

Nur Rony
sumber
Bagaimana menginstal nvmdengan npm?
Dmitri Zaitsev
1
Menginstal nvm melalui homebrew secara resmi sudah usang dan mengarah ke masalah karena beberapa ketidakcocokan. Cara resmi adalah dengan menggunakan curl / wget, lihat github.com/creationix/nvm#install-script see github.com/creationix/nvm/issues/298#issuecomment-152255091 Menginstal melalui npm tidak didukung AFAIK, karena nvm menginstal npm, jadi jika npm juga menginstal nvm, ini dapat mengarah ke edge case. Anda dapat membacanya tentang masalah yang sebelumnya saya tautkan.
Vadorequest
0

Saya hanya punya ide. Gunakan tautan simbolis untuk menyelesaikan kesalahan dan Anda masih dapat menggunakan awalan untuk paket yang diinstal secara global. ln -s [your prefix path] [path in the '~/.nvm'] maka Anda akan memiliki folder simbolis di ~/.nvmfolder tersebut, tetapi pada kenyataannya, paket global Anda masih diinstal di [jalur awalan Anda]. Maka kesalahan tidak akan muncul lagi dan Anda dapat menggunakannya secara nvm use **normal. ps: ini berhasil untuk saya mac. pps: jangan lupa untuk mengatur $PATHke binfolder npm Anda untuk menggunakan paket yang diinstal secara global.

XQi
sumber
-2

Catatan:
untuk menghapus, menghapus, atau menghapus instalan nvm - cukup hapus $NVM_DIRfolder (biasanya ~/.nvm)
yang dapat Anda coba:
rm -rf ~/.nvm

kaiqiu
sumber