nvm nie jest kompatybilny z opcją „prefiksu” konfiguracji npm:

208

Próbuję uruchomić inną wersję NodeJS, nvmale pojawia się ten błąd:

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

Mam prefiks ustawiony celowo, aby tego uniknąć sudo npm(patrz https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Czy jest jakiś sposób, którego mogę użyć nvmbez utraty prefiksu dla globalnie zainstalowanych pakietów?

Dmitri Zaitsev
źródło
Używam przedrostka config npm config, aby obejść ten problem, do tej pory nie ma problemu
ggdx 11.01.2016
@DanWhite Jeśli usunę prefiks, utracę przekierowywanie moich globalnych instalacji do dedykowanego katalogu.
Dmitri Zaitsev
5
(opiekun NVM tutaj) Właśnie o to chodzi. Dzięki nvm to nie Ty zarządzasz swoimi globalnymi instalacjami. Oddzielnie globalne instalacje nigdy nie powinny być współużytkowane między wersjami węzłów.
LJHarb
2
Każda kopia węzła ma własny npm, który określa własne ustawienia.
LJHarb,
1
Rzeczywiście, każda wybrana wersja węzła z nvm jest na powłokę - to z założenia.
LJHarb,

Odpowiedzi:

379

Usuń i zresetuj prefiks

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

Uwaga: Zmień numer wersji na wskazany w komunikacie o błędzie.

nvm nie jest kompatybilny z opcją „prefiks” npm config: obecnie ustawiony na „/ usr / local” Uruchom prefiks config npm config delete ”lub„ nvm użyj --delete-prefix v6.11.1 --silent ”, aby go rozbroić.


Kredyty dla @gabfiocchi na Github - „Musisz zastąpić prefiks NVM”

Mick
źródło
10
To działało jak urok! Po prostu musiałem pobrać moją wersję węzła.
Sirius_B
Wydawało mi się, że mam dowiązanie symboliczne / usr / local / bin / node, które spowodowałoby, że zintegrowany terminal w vscode zobaczyłby wersję węzła, której nie powinien był widzieć. Wydaje się, że wykonanie powyższych kroków, a następnie usunięcie łącza symbolicznego rozwiązało problem. Mój węzeł i NPM są teraz zarządzane przez NVM
Sudhanshu Mishra
to działa idealnie. po prostu nie przegap prefiksu wersji węzła, której zamierzasz użyć. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Działa to tylko w bieżącym oknie. Jeśli otworzysz nową powłokę lub nowe okno, musisz to zrobić od nowa.
jtiscione
3
Muszę to zrobić po kolei. 1. użyj NVM --delete-prefix vx.xx --silent 2. npm config delete prefix 3. npm config set prefix $ NVM_DIR / Wersje / node / vx.xx
Guangtong Shen
66

Miałem ten sam problem i wykonanie npm config delete prefixnie pomogło mi.

Ale to zrobiło:

Po zainstalowaniu nvm przy użyciu brew, utwórz ~/.nvmkatalog:
$ mkdir ~/.nvm

i dodaj następujące wiersze do ~/.bash_profile:

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

(Sprawdź, czy nie masz innego powiązanego polecenia NVM w dowolny ~/.bashrclub ~/.profilelub ~/.bash_profile)

Otwórz nowy terminal i tym razem nie powinien on drukować żadnych komunikatów ostrzegawczych.
Sprawdź, czy nvm działa, wykonując nvm --versionpolecenie.
Następnie zainstaluj / ponownie zainstaluj NodeJS za pomocą nvm install node && nvm alias default node.

Więcej informacji

Zainstalowałem nvmza pomocą, homebrewa następnie otrzymałem to powiadomienie:

Pamiętaj, że upstream poprosił nas o jawne zarządzanie NVM przez Homebrew, które nie jest przez nich obsługiwane i powinieneś sprawdzić wszelkie problemy ze standardową metodą instalacji NVM przed zgłoszeniem.

Należy utworzyć katalog roboczy NVM, jeśli nie istnieje:

 mkdir ~/.nvm

Dodaj następujące polecenie ~/.bash_profilelub żądany plik konfiguracyjny powłoki:

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

Możesz ustawić $NVM_DIRdowolną lokalizację, ale pozostawienie jej bez zmian /usr/local/Cellar/nvm/0.31.0spowoduje zniszczenie instalacji Node zainstalowanych w Nvm podczas aktualizacji / ponownej instalacji.

Zignorowanie go doprowadziło mnie do tego komunikatu o błędzie:

nvmnie jest kompatybilny z npm configopcją „prefiks”: obecnie ustawiony na "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Uruchom, nvm use --delete-prefix v5.7.1 --silentaby go rozbroić.

Postępowałem zgodnie z wcześniejszym przewodnikiem (od homebrew/nvm), a potem okazało się, że muszę ponownie zainstalować NodeJS. Więc zrobiłem:

nvm install node && nvm alias default node

i zostało to naprawione.

Aktualizacja: użycie naparu do zainstalowania NVM powoduje powolne uruchamianie terminalu. Możesz wykonać tę instrukcję, aby ją rozwiązać.

SMMousavi
źródło
6
nvm alias default nodewydawało mi się, że pomogło mi w moim przypadku
mirkobrankovic
28
(opiekun nvm tutaj) nvmnie jest obsługiwany, gdy jest instalowany przez brew. Proszę go odinstalować i użyć właściwej metody, skryptu curl w pliku readme.
LJHarb
3
Użyłem skryptu curl do instalacji nvm. Ta odpowiedź nie działała dla mnie.
intcreator
1
@intcreator Thanks. Skończyło się na tym , że wykonałem kompletną świeżą instalację węzła przy użyciu NVM na podstawie tego przewodnika: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm. Moje zawieszenie zakończyło się tym, że wcześniej zainstalowany przy użyciu homebrew, który nie jest już obsługiwany. Zostało wiele resztek, których usunięcie zajęło trochę czasu, a potem musiałem rm -rf node_modulesi uruchomiłem npm installponownie, ponieważ w katalogach pojawiły się już problemy z uprawnieniami.
Jake T.,
1
Dla przejrzystości potomności musiałem zrobić brew remove node -f, który usuwa wszystkie zainstalowane wersje. Zrób to najpierw, a następnie postępuj zgodnie z instrukcjami w powyższym linku, a następnie usuń node_modules. Powinieneś dostać czystą instalację! Myślę, że wtedy musisz także zainstalować npm, który po prostu postępowałem zgodnie z instrukcjami z artykułu nodejs.org, który pojawił się, gdy go szukałem. npm install npm@latest -gbyło to polecenie po zainstalowaniu węzła.
Jake T.,
31

Może to być konflikt z lokalną instalacją węzła (jeśli w przeszłości był on instalowany w inny sposób niż NVM). Powinieneś usunąć to wystąpienie węzła:

  1. usuń moduły_węzła sudo rm -rf /usr/local/lib/node_modules
  2. usuń węzeł sudo rm /usr/local/bin/node
  3. usuń łącze węzła cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Po nie można zainstalować NVM

Uzdrowiciel
źródło
9
Czy chcesz rozszerzyć swoją odpowiedź tylko na kod o jakieś wyjaśnienie? Komentarze nie są wystarczające, ponieważ twoje wiersze poleceń są bardziej skomplikowane niż przez nie wyjaśnione. Wyjaśnij, dlaczego szczegóły Twojej odpowiedzi rozwiązują problem. Porównaj swoją odpowiedź z dawniejszymi odpowiedziami. Co sprawia, że ​​twoja odpowiedź stanowi wartość dodaną do tego pytania?
Yunnosch
Dla mnie pusty pierwszy wiersz kodu (który ostatnio dodałeś) wymaga własnego wyjaśnienia ...
Yunnosch
Po pięciu miesiącach na StackOverflow, zastanów się nad bardzo wiecania Pomoc z przewodnikiem wycieczek .
Yunnosch
Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, co zmniejsza czytelność zarówno kodu, jak i objaśnień!
Filnor
„Po nie można zainstalować NVM” Jeśli więc moim celem jest użycie NVM, nie powinienem tego robić?
Jake T.,
18

Ten błąd może wystąpić, gdy ścieżka do folderu instalacyjnego NVM ma dowiązanie symboliczne .

Wyjaśnienie

Domyślna ścieżka instalacji NVM to: $HOME/.nvmale folder domowy może być dowiązaniem symbolicznym do innego napędu, na przykład w moim przypadku.

Przykład: mój folder domowy to dowiązanie symboliczne do innego napędu:

/home/myuser -> /bigdrive/myuser

To powoduje problem z prefiksem.

Rozwiązanie

W skrypcie uruchamiania (.bashrc lub .zshrc lub innym) zmień folder NVM na ścieżkę bezpośrednią.

Np 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
źródło
Dzięki! Twoja odpowiedź powinna być bardziej widoczna
ben
Nie. Usmażyłem mózg, aby zrozumieć ten szalony błąd. Nie znalazłem żadnych postów, które mi pomogły. Musiałem ciężko walczyć, aby rozwiązać problem. Z przyjemnością Ci pomogę. Głosuj na moją odpowiedź, aby być bardziej widocznym.
André Avelar
mój echod $ NVM_DIR brzmiał „/Users/vijayshanker/.nvm” powinienem umieścić „export NVM_DIR =" / Users / vijayshanker / .nvm (i reszta) ”w bashrc, próbowałem, ale wciąż go nie naprawiłem, walczę o 6 godzin, proszę o pomoc: nie mam zainstalowanego npm, nie zainstalowałem mojego węzła z npm
vijay shanker
jednym rozwiązaniem może być eksport NVD_DIR = $ (readlink -f "$ HOME / .nvm") w .bashrc lub wierszu poleceń. Spowoduje to usunięcie całego dowiązania symbolicznego z $ HOME / .nvm i wyeksportuje zwykłą pełną ścieżkę zawierającą tylko prawdziwe katalogi.
Nimlar
10

Natknąłem się na to podczas używania węzła zainstalowanego przez nvm, z nvmzainstalowanym przez homebrew. Rozwiązałem go, uruchamiając brew uninstall nvm, rm -rf $NVM_DIRa następnie ponownie instalując nvm przy użyciu oficjalnego skryptu instalacyjnego i ponownie instalując potrzebną wersję węzła.

Uwaga: Mam również $NVM_DIRzamontowane i dowiązanie symboliczne. Przeniosłem go z powrotem do mojego homediru.

Lane Rettig
źródło
8

Może to stanowić problem, jeśli gdzieś jest zainstalowany katalog domowy, ponieważ nvm nie działa poprawnie z dowiązaniami symbolicznymi. Ponieważ nie obchodzi mnie, gdzie znajduje się mój $ NVM_DIR, uruchamiam to i wszystko działa dobrze:

$ mv ~/.nvm /tmp/
$ export NVM_DIR="/tmp/.nvm"
$ nvm use --delete-prefix v6.9.1
James May
źródło
6

wprowadź opis zdjęcia tutajMiałem ten sam problem i za każdym razem było to naprawdę denerwujące. Uruchomiłem polecenie do terminala i zostało to naprawione

Dla tych spróbuj usunąć nvm z naparu

to może nie wystarczyć, aby zaparzyć odinstalowanie NVM

jeśli widzisz, że przedrostek npm to wciąż / usr / local, uruchom to polecenie

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

Panayiotis Georgiou
źródło
4

Mam ten sam komunikat o błędzie, ale inne rozwiązanie. Automatycznie wygenerowana ścieżka podczas zawijania (install.sh) nie jest zgodna. Sprawdź to za pomocą:

echo $NVM_DIR

W moim przypadku: /var/www//.nvm. Pokaż w automatycznie wygenerowanym pliku bash i zmień go i zamień: (~ / .bash_profile, ~ / .zshrc, ~ / .profile lub ~ / .bashrc)

zastąpić

export NVM_DIR="$HOME/.nvm"

z (np.)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
źródło
Przybyłem tutaj, aby umieścić ten sam komentarz :) W moim przypadku było tak, ponieważ kiedy utworzyłem użytkownika, ustawiłem home jako useradd - home / home / user / z trailing / usunąłem z pliku / etc / passwd i wszystko zaczęło działać ponownie
Izrael
1

Śledziłem odpowiedź https://stackoverflow.com/a/47861348/2391795, ale nie wyszło to dobrze.

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

Po uruchomieniu zalecanych poleceń mój nvm już nie działał, uruchomienie nvm usewyświetli odpowiednią używaną wersję węzła, ale uruchomienie node -vwyświetli inną. Zmiana wersji węzła nie była już możliwa.

Całkowicie odinstalowałem i ponownie zainstalowałem NVM, aby to naprawić. Śledziłem https://github.com/creationix/nvm#manual-uninstall uruchamiając

$ rm -rf "$NVM_DIR"

Następnie edytowałem my, .zshrcaby usunąć linie związane z nvm, które w moim przypadku były

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"

Następnie uruchomiłem nową powłokę (aby nvm nie został załadowany do tej nowej powłoki) i uruchomiłem https://github.com/creationix/nvm#install-script

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

Co dodało nvm wiersze, które wcześniej usunąłem z mojego .zshrc.

Potem mogłem używać nvm tak jak kiedyś. Myślę, że to dziwny przypadek, gdy coś poszło nie tak i zmusiło mnie do ponownej instalacji wszystkiego, nie wygląda na to, że większość ludzi przechodzi przez to z powodu tego problemu.

Vadorequest
źródło
1

Pozwól mi opisać moją sytuację.

Najpierw sprawdź bieżącą konfigurację

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

Następnie znalazłem konfigurację błędu w danych wyjściowych:

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

Więc C:\\Program Files\\nodejsusunąłem plik /mnt/c/Users/paul/.npmrc.

Paul Han
źródło
1

Rozwiązałem ten problem, gdy był wyświetlany na terminalach VSCode i JetBrains, ale nie w natywnym terminalu za pomocą następujących poleceń:

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

To da ci rozstrzygniętą ścieżkę na końcu:

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

Stamtąd usunięcie plików i ponowne uruchomienie kodu VS powinno rozwiązać problem:

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

naprawić link: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
źródło
0

Szukałem rozwiązania problemu z prefiksem NVM i znalazłem to pytanie (zanim znalazłem rozwiązanie). Oto moje „okno dialogowe” powłoki. Mam nadzieję, że może się przydać komuś. Byłem w stanie ustawić prefiks za pomocą tego postu: https://github.com/npm/npm/issues/6592

Kiedy próbowałem npm config delete prefixlub nvm use --delete-prefixprzed użyciem npm --prefix="" set prefix "", otrzymałem tylko: npm ERR! źle kod 0

Zauważ, że będziesz musiał powtórzyć tę samą procedurę dla każdej wersji węzła, po instalacji prefiks jest ponownie ustawiony na (w moim przypadku) / usr / local.

    $ 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
źródło
0

Miałem ten problem po przeniesieniu mojego folderu domowego na nowy dysk w systemie Linux. Zostało to naprawione przez usunięcie folderu .nvm i ponowną instalację nvm

Pablo Mescher
źródło
0

Właśnie rozwiązałem problem. Symlinkowałem $HOME/.nvmdo $DEV_ZONE/env/node/nvmkatalogu. Miałem ten sam problem. Zastąpiłem NVM_DIRw $HOME/.zshrcnastępujący sposób

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

BTW, zainstaluj NVM za pomocą curllub wgetnie używaj poleceń brew. Aby uzyskać więcej, sprawdź komentarz w tym numerze na Github: 855 # Issuecomment-146115434

Nur Rony
źródło
A co nvmz instalacją npm?
Dmitri Zaitsev
1
Instalowanie NVM przez Homebrew jest oficjalnie przestarzałe i prowadzi do problemów z powodu niektórych niezgodności. Oficjalnym sposobem jest użycie curl / wget, patrz github.com/creationix/nvm#install-script patrz github.com/creationix/nvm/issues/298#issuecomment-152255091 Instalowanie przez npm nie jest obsługiwane AFAIK, ponieważ nvm instaluje npm, więc jeśli npm również zainstaluje nvm, może to prowadzić do przypadków na krawędziach. Możesz przeczytać o tym na temat, który wcześniej powiązałem.
Vadorequest,
0

Mam tylko pomysł. Użyj dowiązania symbolicznego, aby rozwiązać błąd, a nadal możesz używać prefiksu dla globalnie zainstalowanych pakietów. ln -s [your prefix path] [path in the '~/.nvm'] wtedy będziesz miał symboliczny folder w ~/.nvmfolderze, ale w rzeczywistości twoje pakiety globalne są nadal instalowane w [twojej ścieżce prefiksu]. Następnie błąd nie pojawi się ponownie i będzie można używać nvm use **normalnie. ps: działa na mnie mac. pps: nie zapomnij ustawić $PATHna binfolder npm, aby korzystać z globalnie zainstalowanych pakietów.

XQi
źródło
-2

Uwaga:
aby usunąć, usunąć lub odinstalować NVM - po prostu usuń $NVM_DIRfolder (zwykle ~/.nvm)
, możesz spróbować:
rm -rf ~/.nvm

kaiqiu
źródło