nvm ist nicht kompatibel mit der Option "Präfix" der npm-Konfiguration:

207

Ich versuche, eine andere NodeJS-Version mit auszuführen, erhalte nvmjedoch den folgenden Fehler:

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

Ich habe mein Präfix absichtlich festgelegt, um dies zu vermeiden sudo npm(siehe https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Gibt es eine Möglichkeit, die ich verwenden kann, nvmohne mein Präfix für global installierte Pakete zu verlieren?

Dmitri Zaitsev
quelle
Ich benutze npm config delete Präfix , um dies zu
umgehen
@DanWhite Wenn ich das Präfix lösche, verliere ich die Umleitung meiner globalen Installationen in ein dediziertes Verzeichnis.
Dmitri Zaitsev
5
(NVM-Betreuer hier) Das ist der Punkt. Mit nvm verwaltet nicht Sie, sondern Ihre globale Installation. Unabhängig davon sollten globale Installationen niemals von mehreren Knotenversionen gemeinsam genutzt werden.
LJHarb
2
Jede Kopie des Knotens wird mit einer eigenen npm geliefert, die ihre eigenen Einstellungen festlegt.
LJHarb
1
In der Tat ist jede ausgewählte Knotenversion mit nvm pro Shell - das ist beabsichtigt.
LJHarb

Antworten:

378

Löschen Sie das Präfix und setzen Sie es zurück

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

Hinweis: Ändern Sie die Versionsnummer durch die in der Fehlermeldung angegebene.

nvm ist nicht kompatibel mit der Option "Präfix" der npm-Konfiguration: Derzeit auf "/ usr / local" Ausführen "npm config delete delete prefix" oder "nvm use --delete-prefix v6.11.1 --silent", um es zu deaktivieren.


Dank an @gabfiocchi auf Github - "Sie müssen das nvm-Präfix überschreiben"

Mick
quelle
10
Das hat wie ein Zauber gewirkt! Musste nur meine Knotenversion greifen.
Sirius_B
Ich schien einen symbolischen Link / usr / local / bin / node zu haben, der dazu führen würde, dass das in vscode integrierte Terminal eine Knotenversion sieht, die es nicht hätte sehen sollen. Das Befolgen der obigen Schritte und das anschließende Löschen des symbolischen Links scheint das Problem behoben zu haben. Mein Knoten und npm werden jetzt von nvm verwaltet
Sudhanshu Mishra
das funktioniert perfekt. Verpassen Sie nicht, das Präfix der Knotenversion festzulegen, die Sie verwenden werden. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Dies funktioniert nur im aktuellen Fenster. Wenn Sie eine neue Shell oder ein neues Fenster öffnen, müssen Sie alles noch einmal machen.
jtiscione
3
Ich muss das in der richtigen Reihenfolge tun. 1. nvm benutze --delete-prefix vx.xx --silent 2. npm config lösche das Präfix 3. npm config setze das Präfix $ NVM_DIR / version / node / vx.xx
Guangtong Shen
66

Ich hatte das gleiche Problem und die Ausführung npm config delete prefixhat mir nicht geholfen.

Aber das tat:

Erstellen Sie nach der Installation von nvm mit brau ein ~/.nvmVerzeichnis:
$ mkdir ~/.nvm

und fügen Sie folgende Zeilen hinzu ~/.bash_profile:

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

(Stellen Sie sicher, dass Sie in keinem ~/.bashrcoder ~/.profileoder keinen anderen Befehl im Zusammenhang mit nvm haben. ~/.bash_profile)

Öffnen Sie ein neues Terminal und dieses Mal sollte es keine Warnmeldung drucken.
Überprüfen Sie, ob nvm funktioniert, indem Sie den nvm --versionBefehl ausführen .
Danach installieren / installieren Sie NodeJS mit nvm install node && nvm alias default node.

Mehr Info

Ich installierte nvmVerwendung homebrewund danach habe ich diese Benachrichtigung bekam:

Bitte beachten Sie, dass Upstream uns gebeten hat, die explizite Verwaltung von nvm über Homebrew nicht zu unterstützen. Sie sollten daher vor der Berichterstellung alle Probleme anhand der Standard-nvm-Installationsmethode prüfen.

Sie sollten das Arbeitsverzeichnis von NVM erstellen, wenn es nicht vorhanden ist:

 mkdir ~/.nvm

Fügen ~/.bash_profileSie der gewünschten Shell-Konfigurationsdatei Folgendes hinzu :

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

Sie können einen $NVM_DIRbeliebigen Speicherort /usr/local/Cellar/nvm/0.31.0festlegen. Wenn Sie ihn jedoch unverändert lassen, werden alle von nvm installierten Knoteninstallationen beim Upgrade / bei der Neuinstallation zerstört.

Das Ignorieren brachte mich zu dieser Fehlermeldung:

nvmist nicht kompatibel mit der npm configOption "Präfix": Derzeit auf " "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Ausführen " eingestellt, nvm use --delete-prefix v5.7.1 --silentum sie zu deaktivieren.

Ich folgte einer früheren Anleitung (von homebrew/nvm) und stellte danach fest, dass ich NodeJS neu installieren musste. So tat ich:

nvm install node && nvm alias default node

und es wurde behoben.

Update: Die Verwendung von Brew zur Installation von NVM führt zu einem langsamen Start des Terminals. Sie können dieser Anweisung folgen, um das Problem zu beheben.

SMMousavi
quelle
6
nvm alias default nodeschien mir in meinem Fall zu helfen
mirkobrankovic
28
(NVM-Betreuer hier) nvmwird bei der Installation über Brew nicht unterstützt. Bitte deinstallieren Sie es und verwenden Sie die richtige Methode, das Curl-Skript in der Readme-Datei.
LJHarb
3
Ich habe das Curl-Skript zur Installation verwendet nvm. Diese Antwort hat bei mir nicht funktioniert.
Intcreator
1
@ Intcreator Danke. Am Ende habe ich eine vollständige Neuinstallation des Knotens mit nvm durchgeführt, basierend auf diesem Handbuch: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm Und mein Hangup war das, was ich zuvor hatte installiert mit Homebrew, das nicht mehr unterstützt wird. Es blieben viele Überreste übrig , deren Löschung eine Weile dauerte, und dann musste ich erneut rm -rf node_modulesausführen npm install, da die Verzeichnisse bereits Probleme mit den Berechtigungen hatten.
Jake T.
1
Für die Klarheit der Nachwelt musste ich eine machen brew remove node -f, die alle installierten Versionen entfernt. Tun Sie dies zuerst, folgen Sie dann der Anleitung in meinem Link oben und entfernen Sie dann node_modules. Sie sollten eine Neuinstallation bekommen! Ich denke, Sie müssen dann auch npm installieren. Ich habe gerade die Anweisungen aus einem Artikel von nodejs.org befolgt, der bei der Suche aufgetaucht ist. npm install npm@latest -gwar der Befehl, sobald Sie Knoten installieren.
Jake T.
31

Dies kann ein Konflikt mit Ihrer lokalen Installation von Node sein (wenn Sie es in der Vergangenheit auf einem anderen Weg als NVM installiert hatten). Sie sollten diese Instanz des Knotens löschen:

  1. Entfernen Sie node_modules sudo rm -rf /usr/local/lib/node_modules
  2. Knoten entfernen sudo rm /usr/local/bin/node
  3. Knotenverbindung entfernen cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Nachdem Sie nvm nicht installieren können

Heiler
quelle
9
Möchten Sie Ihre Nur-Code-Antwort mit einer Erklärung ergänzen? Die Kommentare reichen nicht aus, da Ihre Befehlszeilen komplizierter sind als von ihnen erklärt. Erläutern Sie, warum die Details Ihrer Antwort das Problem lösen. Vergleichen Sie Ihre Antwort mit den um Jahre älteren Antworten. Was macht Ihre Antwort zu einem Mehrwert für diese Frage?
Yunnosch
Für mich braucht die leere erste Codezeile (die Sie kürzlich hinzugefügt haben) eine eigene Erklärung ...
Yunnosch
Erwägen Sie nach fünf Monaten bei StackOverflow die sehr aufschlussreiche geführte Hilfetour .
Yunnosch
Während dieses Code-Snippet die Frage lösen kann, hilft das Hinzufügen einer Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen. Dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!
Filnor
"Nachdem Sie nvm nicht installieren können" Wenn mein Ziel darin besteht, nvm zu verwenden, sollte ich dies nicht tun?
Jake T.
18

Dieser Fehler kann auftreten, wenn der Pfad Ihres NVM-Installationsordners einen symbolischen Link enthält .

Erläuterung

Der Standardinstallationspfad von NVM lautet: $HOME/.nvmIhr Home-Ordner könnte jedoch ein symbolischer Link für ein anderes Laufwerk sein, wie in meinem Fall.

Beispiel: Mein Home-Ordner ist ein symbolischer Link zu einem anderen Laufwerk:

/home/myuser -> /bigdrive/myuser

Dies verursacht das Präfixproblem.

Lösung

Ändern Sie in Ihrem Startskript (.bashrc oder .zshrc oder andere) den NVM-Ordner in den direkten Pfad.

Bsp. : 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
quelle
Vielen Dank! Ihre Antwort sollte mehr Sichtbarkeit haben
ben
Nee. Ich habe mein Gehirn gebraten, um diesen verrückten Fehler zu verstehen. Ich habe keine Beiträge gefunden, die mir geholfen haben. Ich musste hart kämpfen, um das Problem zu lösen. Ich helfe Ihnen gerne weiter. Stimmen Sie über meine Antwort ab, um sichtbarer zu werden.
André Avelar
Mein Echod $ NVM_DIR war "/Users/vijayshanker/.nvm", sollte ich "export NVM_DIR =" / Users / vijayshanker / .nvm (und den Rest) "in bashrc setzen, versucht, aber es hat es immer noch nicht behoben, gekämpft 6 Stunden, bitte helfen Sie zu beachten: Ich habe nicht npm installiert, ich habe meinen Knoten nicht von npm installiert
Vijay Shanker
Eine Lösung könnte darin bestehen, NVM_DIR = $ (readlink -f "$ HOME / .nvm") in .bashrc oder in die Befehlszeile zu exportieren. Dadurch werden alle Symlinks aus $ HOME / .nvm entfernt und ein einfacher vollständiger Pfad mit nur echten Verzeichnissen exportiert.
Nimlar
10

Ich bin darauf gestoßen, als ich den über installierten Knoten verwendet habe nvm, nvmder über Homebrew installiert wurde. Ich löste es durch Laufen brew uninstall nvm, rm -rf $NVM_DIRdann Neuinstallation NVM mit dem offiziellen Skript installieren und Neuinstallation der Knoten Version , die ich brauchte.

Hinweis: Ich hatte auch $NVM_DIRgemountet und symlinked. Ich zog es zurück in meine Heimat.

Lane Rettig
quelle
8

Es könnte das Problem sein, wenn Sie Ihr Home-Verzeichnis irgendwo gemountet haben, da nvm mit Symlinks nicht richtig funktioniert. Da es mir egal ist, wo sich mein $ NVM_DIR befindet, führe ich dies aus und alles funktioniert einwandfrei:

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

Geben Sie hier die Bildbeschreibung einIch hatte das gleiche Problem und es war jedes Mal sehr nervig mit dem Terminal. Ich führe den Befehl zum Terminal aus und er wurde behoben

Für diejenigen, die versuchen, nvm aus dem Gebräu zu entfernen

Es reicht möglicherweise nicht aus, nur nvm zu deinstallieren

Wenn Sie sehen, dass das Präfix npm immer noch / usr / local ist, führen Sie diesen Befehl aus

sudo rm -rf /usr/local/{lib/node stören, /.

Panayiotis Georgiou
quelle
4

Ich habe die gleiche Fehlermeldung, aber eine andere Lösung. Der automatisch generierte Pfad während des Einrollens (install.sh) stimmt nicht überein. Überprüfen Sie dies mit:

echo $NVM_DIR

In meinem Fall : /var/www//.nvm. Zeigen Sie es in Ihrer automatisch generierten Bash-Datei an, ändern Sie es und ersetzen Sie es: (~ / .bash_profile, ~ / .zshrc, ~ / .profile oder ~ / .bashrc)

ersetzen

export NVM_DIR="$HOME/.nvm"

mit (zB)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
quelle
Kam hierher, um den gleichen Kommentar zu schreiben :) In meinem Fall war, weil ich beim Erstellen des Benutzers das Home als useradd --home / home / user / festgelegt habe, wobei das Trailing / aus der Datei / etc / passwd entfernt wurde und alles funktioniert wieder
Israel
1

Ich folgte der Antwort von https://stackoverflow.com/a/47861348/2391795 , aber es hat nicht gut geklappt.

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

Nachdem ich die empfohlenen Befehle ausgeführt hatte, funktionierte mein nvm nicht mehr. Beim Ausführen wurde nvm usedie richtige Knotenversion angezeigt, beim Ausführen wurde node -vjedoch eine andere angezeigt . Die Version des Knotens konnte nicht mehr geändert werden.

Ich habe nvm vollständig deinstalliert und neu installiert, um das Problem zu beheben. Ich folgte https://github.com/creationix/nvm#manual-uninstall durch Ausführen

$ rm -rf "$NVM_DIR"

Dann bearbeitete ich meine .zshrc, um die Zeilen zu entfernen, die sich auf nvm beziehen, die in meinem Fall waren

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"

Dann wurde eine neue Shell gestartet (damit nvm nicht in diese neue Shell geladen wird) und https://github.com/creationix/nvm#install-script ausgeführt

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

Was nvm die Zeilen hinzufügte, die ich zuvor in meinem entfernt hatte .zshrc.

Dann konnte ich nvm wie früher verwenden. Ich denke, das ist ein seltsamer Fall, in dem Dinge schief gelaufen sind und mich gezwungen haben, alles neu zu installieren. Es sieht nicht so aus, als würden die meisten Leute dies aufgrund dieses Problems durchmachen.

Vadorequest
quelle
1

Lassen Sie mich meine Situation beschreiben.

Überprüfen Sie zunächst die aktuelle Konfiguration

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

Dann fand ich die Fehlerkonfiguration in der Ausgabe:

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

Also habe ich das C:\\Program Files\\nodejsin /mnt/c/Users/paul/.npmrc gelöscht .

Paul Han
quelle
1

Ich habe dieses Problem gelöst, als es auf VSCode- und JetBrains-Terminals angezeigt wurde, jedoch nicht im nativen Terminal mit den folgenden Befehlen:

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

Dies gibt Ihnen am Ende den aufgelösten Pfad:

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

Von dort aus sollte das Problem behoben werden, indem die Dateien entfernt und VS Code neu gestartet werden:

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

Fix Link: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
quelle
0

Ich suchte nach einer Lösung für das NVM-Präfix-Problem und fand diese Frage (bevor ich die Lösung fand). Hier ist meine Shell "Dialog". Ich hoffe, es kann für jemanden nützlich sein. Mit Hilfe dieses Beitrags konnte ich das Präfix festlegen: https://github.com/npm/npm/issues/6592

Wenn ich es versuchte npm config delete prefixoder nvm use --delete-prefixbevor ich es benutzte npm --prefix="" set prefix "", bekam ich nur: npm ERR! nicht ok Code 0

Beachten Sie, dass Sie bei jeder Knotenversion den gleichen Vorgang wiederholen müssen. Das Präfix wird nach der Installation auf (in meinem Fall) / usr / local zurückgesetzt.

    $ 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
quelle
0

Ich hatte dieses Problem, nachdem ich meinen Home-Ordner auf ein neues Laufwerk unter Linux verschoben hatte. Es wurde behoben, indem der Ordner .nvm entfernt und nvm neu installiert wurde

Pablo Mescher
quelle
0

Habe gerade das Problem behoben. Ich habe eine Verknüpfung $HOME/.nvmzum $DEV_ZONE/env/node/nvmVerzeichnis hergestellt. Ich stand vor dem gleichen Problem. Ich ersetzte NVM_DIRin $HOME/.zshrcwie folgt

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

Übrigens, bitte installieren Sie NVM mit curloder wgetBefehl nicht mit brew. Weitere Informationen finden Sie im Kommentar in dieser Ausgabe zu Github: 855 # issuecomment-146115434

Nur Rony
quelle
Was ist mit der Installation nvmmit npm?
Dmitri Zaitsev
1
Die Installation von nvm über Homebrew ist offiziell veraltet und führt aufgrund einiger Inkompatibilitäten zu Problemen. Die offizielle Methode ist die Verwendung von curl / wget (siehe github.com/creationix/nvm#install-script). Siehe github.com/creationix/nvm/issues/298#issuecomment-152255091 Die Installation über npm wird von AFAIK nicht unterstützt, da nvm installiert wird npm Wenn npm also auch nvm installiert, kann dies zu Randfällen führen. Sie können darüber zu dem Thema lesen, das ich zuvor verlinkt habe.
Vadorequest
0

Ich habe nur eine Idee. Verwenden Sie den symbolischen Link, um den Fehler zu beheben, und Sie können Ihr Präfix weiterhin für global installierte Pakete verwenden. ln -s [your prefix path] [path in the '~/.nvm'] Dann haben Sie einen symbolischen Ordner im ~/.nvmOrdner, aber tatsächlich sind Ihre globalen Pakete immer noch in [Ihrem Präfixpfad] installiert. Dann wird der Fehler nicht mehr angezeigt und Sie können ihn nvm use **normal verwenden. ps: es hat für mich gearbeitet mac. pps: Vergessen Sie nicht, auf $PATHIhren npm- binOrdner zu setzen, um die global installierten Pakete zu verwenden.

XQi
quelle
-2

Hinweis:
Um nvm zu entfernen, zu löschen oder zu deinstallieren, entfernen Sie einfach $NVM_DIR(normalerweise ~/.nvm) den Ordner , den
Sie versuchen können:
rm -rf ~/.nvm

kaiqiu
quelle