nvm n'est pas compatible avec l'option "prefix" de npm config:

208

J'essaie d'exécuter une autre version de NodeJS avec nvmmais j'obtiens cette erreur:

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

J'ai mon préfixe défini à dessein à éviter sudo npm(voir https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Est-il possible d'utiliser nvmsans perdre mon préfixe pour les packages installés globalement?

Dmitri Zaitsev
la source
J'utilise npm config delete prefix pour contourner ce problème, aucun problème jusqu'à présent
ggdx
@DanWhite Si je supprime le préfixe, je perds en détournant mes installations globales dans un répertoire dédié.
Dmitri Zaitsev
5
(mainteneur nvm ici) C'est le point. Avec nvm, c'est lui, pas vous, qui gère vos installations globales. Séparément, les installations globales ne doivent jamais être partagées entre les versions de nœuds.
LJHarb
2
Chaque copie de nœud est livrée avec son propre npm, qui détermine ses propres paramètres.
LJHarb
1
En effet, chaque version de nœud sélectionnée avec nvm est par shell - c'est par conception.
LJHarb

Réponses:

379

Supprimer et réinitialiser le préfixe

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

Remarque: Modifiez le numéro de version avec celui indiqué dans le message d'erreur.

nvm n'est pas compatible avec l'option "prefix" de npm config: actuellement définie sur "/ usr / local" Run "npm config delete prefix" ou "nvm use --delete-prefix v6.11.1 --silent" pour la désactiver.


Crédits à @gabfiocchi sur Github - "Vous devez remplacer le préfixe nvm"

Mick
la source
10
Cela a fonctionné comme un charme! Juste eu à saisir ma version de nœud.
Sirius_B
Il me semblait avoir un lien symbolique / usr / local / bin / node qui ferait que le terminal intégré dans vscode verrait une version de nœud qu'il n'aurait pas dû voir. Suivre les étapes ci-dessus puis supprimer le lien symbolique semble avoir résolu le problème. Mon nœud et npm sont régis par nvm maintenant
Sudhanshu Mishra
cela fonctionne parfaitement. ne manquez pas de définir le préfixe de la version du nœud, vous allez utiliser. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Cela ne fonctionne que dans la fenêtre actuelle. Si vous ouvrez un nouveau shell ou une nouvelle fenêtre, vous devez tout recommencer.
jtiscione
3
Je dois les faire dans l'ordre. 1. nvm use --delete-prefix vx.xx --silent 2. npm config delete prefix 3. npm config set prefix $ NVM_DIR / versions / node / vx.xx
Guangtong Shen
66

J'ai eu le même problème et l'exécution npm config delete prefixne m'a pas aidé.

Mais cela a fait:

Après avoir installé nvm à l'aide de brew, créez un ~/.nvmrépertoire:
$ mkdir ~/.nvm

et ajoutez les lignes suivantes dans ~/.bash_profile:

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

(Vérifiez que vous n'avez aucune autre commande liée à nvm dans aucun ~/.bashrcou ~/.profileou ~/.bash_profile)

Ouvrez un nouveau terminal et cette fois, il ne devrait imprimer aucun message d'avertissement.
Vérifiez que nvm fonctionne en exécutant la nvm --versioncommande.
Après cela, installez / réinstallez NodeJS à l'aide de nvm install node && nvm alias default node.

Plus d'informations

J'ai installé en nvmutilisant homebrewet après cela, j'ai reçu cette notification:

Veuillez noter que l'amont nous a demandé de rendre explicite la gestion de nvm via Homebrew n'est pas pris en charge par eux et vous devez vérifier tous les problèmes par rapport à la méthode d'installation standard de nvm avant de signaler.

Vous devez créer le répertoire de travail de NVM s'il n'existe pas:

 mkdir ~/.nvm

Ajoutez ce qui suit à ~/.bash_profilevotre fichier de configuration de shell souhaité:

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

Vous pouvez définir $NVM_DIRn'importe quel emplacement, mais le laisser inchangé /usr/local/Cellar/nvm/0.31.0détruira toutes les installations de nœuds installées par nvm lors de la mise à niveau / réinstallation.

L'ignorer m'a amené à ce message d'erreur:

nvmn'est pas compatible avec l' npm configoption "préfixe": actuellement définie sur "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Exécuter nvm use --delete-prefix v5.7.1 --silentpour la désactiver.

J'ai suivi un guide précédent (de homebrew/nvm) et après cela, j'ai constaté que je devais réinstaller NodeJS. J'ai donc fait:

nvm install node && nvm alias default node

et il a été corrigé.

Mise à jour: l' utilisation de brew pour installer NVM entraîne un démarrage lent du terminal. Vous pouvez suivre cette instruction pour le résoudre.

SMMousavi
la source
6
nvm alias default nodesemblait m'a aidé dans mon cas
mirkobrankovic
28
(mainteneur nvm ici) nvmn'est pas pris en charge lorsqu'il est installé via une infusion. Veuillez le désinstaller et utiliser la méthode appropriée, le script curl dans le fichier Lisez-moi.
LJHarb
3
J'ai utilisé le script curl pour installer nvm. Cette réponse n'a pas fonctionné pour moi.
créateur
1
@intcreator Merci. J'ai fini par faire une nouvelle installation complète de nœud en utilisant nvm basé sur ce guide: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm Et mon raccrochage a fini par être celui que j'avais précédemment installé en utilisant homebrew, qui n'est plus pris en charge. Il a laissé beaucoup de restes qui ont un certain temps pour effacer, puis je devais rm -rf node_moduleset courir à npm installnouveau, étant donné que les répertoires avaient déjà des problèmes screwy des autorisations.
Jake T.
1
Pour la clarté de la postérité, j'ai dû faire un brew remove node -f, qui supprime toutes les versions installées. Faites-le d'abord, puis suivez le guide dans mon lien ci-dessus, puis supprimez node_modules. Vous devriez obtenir une installation propre! Je pense que vous devez également installer npm, que je viens de suivre les instructions d'un article nodejs.org qui est apparu lorsque je l'ai recherché. npm install npm@latest -gétait la commande, une fois que vous avez installé le nœud.
Jake T.18
31

Cela peut être un conflit avec votre installation locale de Node (si vous l'aviez installé via une autre méthode que NVM dans le passé). Vous devez supprimer cette instance de nœud:

  1. supprimer node_modules sudo rm -rf /usr/local/lib/node_modules
  2. supprimer le nœud sudo rm /usr/local/bin/node
  3. supprimer le lien du nœud cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Après avoir installé nvm

Guérisseur
la source
9
Souhaitez-vous étoffer votre réponse de code uniquement avec quelques explications? Les commentaires ne suffisent pas, car vos lignes de commande sont plus complexes qu'elles ne l'expliquent. Expliquez pourquoi les détails de votre réponse résolvent le problème. Comparez votre réponse avec les réponses des années précédentes. Qu'est-ce qui fait de votre réponse une valeur ajoutée à cette question?
Yunnosch
Pour moi, la première ligne de code vide (que vous avez récemment ajoutée) a besoin de sa propre explication ...
Yunnosch
Au bout de cinq mois sur StackOverflow, pensez à prendre l'aide guidée très instructif tournée .
Yunnosch
Bien que cet extrait de code puisse résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondrez à la question des lecteurs à l'avenir et que ces personnes ne connaissent peut-être pas les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, cela réduit la lisibilité du code et des explications!
Filnor
"Après que vous ne puissiez pas installer nvm" Donc, si mon objectif est d'utiliser nvm, je ne devrais pas faire ça?
Jake T.
18

Cette erreur peut se produire lorsque le chemin du dossier d'installation de NVM possède un lien symbolique .

Explication

Le chemin d'installation par défaut de NVM est: $HOME/.nvmmais votre dossier personnel pourrait être un lien symbolique pour un autre lecteur, comme mon cas.

Exemple, mon dossier de départ est un lien symbolique vers un autre lecteur:

/home/myuser -> /bigdrive/myuser

Cela provoque le problème de préfixe.

Solution

Sur votre script de démarrage (.bashrc ou .zshrc ou autre), remplacez le dossier NVM par le chemin direct.

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
la source
Merci! Votre réponse devrait avoir plus de visibilité
ben
Nan. J'ai fait frire mon cerveau pour comprendre cette folle erreur. Je n'ai trouvé aucun message qui m'a aidé. J'ai dû me battre dur pour résoudre le problème. Je suis heureux de vous aider. Votez sur ma réponse pour être plus visible.
André Avelar
mon echod $ NVM_DIR était "/Users/vijayshanker/.nvm" devrais-je mettre "export NVM_DIR =" / Users / vijayshanker / .nvm (et le reste) "dans bashrc, essayé mais il ne l'a toujours pas corrigé, a lutté pour 6 heures, veuillez noter: je n'ai pas installé npm, je n'ai pas installé mon nœud à partir de npm
vijay shanker
une solution peut-être pour exporter NVM_DIR = $ (readlink -f "$ HOME / .nvm") en .bashrc ou en ligne de commande. Cela supprimera tous les liens symboliques de $ HOME / .nvm et exportera un chemin complet simple avec uniquement de vrais répertoires.
Nimlar
10

J'ai rencontré cela en utilisant un nœud installé via nvm, avec nvminstallé via homebrew. Je l'ai résolu en exécutant brew uninstall nvm, rm -rf $NVM_DIRpuis en réinstallant nvm à l'aide du script d'installation officiel et en réinstallant la version du nœud dont j'avais besoin.

Remarque: j'avais également $NVM_DIRmonté et lié. Je l'ai replacé dans mon homedir.

Lane Rettig
la source
9

Cela pourrait être le problème si votre répertoire personnel est monté quelque part, car nvm ne fonctionne pas correctement avec les liens symboliques. Parce que je me fiche de savoir où se trouve mon $ NVM_DIR, je lance cela et tout fonctionne bien:

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

entrez la description de l'image iciJ'ai eu le même problème et c'était vraiment énervant à chaque fois avec le terminal. J'exécute la commande sur le terminal et elle a été corrigée

Pour ceux qui essaient de retirer le NVM de l'infusion

il ne suffit peut-être pas de simplement désinstaller nvm

si vous voyez que le préfixe npm est toujours / usr / local, exécutez cette commande

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

Panayiotis Georgiou
la source
4

J'ai le même message d'erreur mais une autre solution. Le chemin généré automatiquement pendant curl (install.sh) ne correspond pas. Vérifiez cela avec:

echo $NVM_DIR

Dans mon cas: /var/www//.nvm. Affichez dans votre fichier bash généré automatiquement et modifiez-le et remplacez-le: (~ / .bash_profile, ~ / .zshrc, ~ / .profile ou ~ / .bashrc)

remplacer

export NVM_DIR="$HOME/.nvm"

avec (par exemple)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
la source
Je suis venu ici pour mettre le même commentaire :) Dans mon cas, c'est parce que lorsque j'ai créé l'utilisateur, j'ai défini la maison comme useradd --home / home / user / avec le dernier / j'ai supprimé du fichier / etc / passwd et tout commence à fonctionner à nouveau
Israël
1

J'ai suivi la réponse https://stackoverflow.com/a/47861348/2391795 mais cela n'a pas bien fonctionné.

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

Après avoir exécuté les commandes recommandées, mon nvm ne fonctionnait plus, l'exécution nvm useafficherait la version de nœud appropriée utilisée, mais l'exécution en node -vafficherait une autre. Il n'était plus possible de changer la version du nœud.

J'ai désinstallé et réinstallé nvm entièrement pour le réparer. J'ai suivi https://github.com/creationix/nvm#manual-uninstall en exécutant

$ rm -rf "$NVM_DIR"

Ensuite, j'ai modifié my .zshrcpour supprimer les lignes liées à nvm, qui dans mon cas étaient

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"

Puis a commencé un nouveau shell (pour que nvm ne soit pas chargé dans ce nouveau shell) et a exécuté https://github.com/creationix/nvm#install-script

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

Ce qui a ajouté nvm les lignes que j'avais précédemment supprimées dans mon .zshrc.

Ensuite, j'ai pu utiliser nvm comme je le faisais auparavant. Je suppose que c'est un cas étrange où les choses ont mal tourné et m'ont forcé à tout réinstaller, il ne semble pas que la plupart des gens passent par ce problème à cause de ce problème.

Vadorequest
la source
1

Permettez-moi de décrire ma situation.

Tout d'abord, vérifiez la configuration actuelle

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

Ensuite, j'ai trouvé la configuration d'erreur dans la sortie:

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

J'ai donc supprimé le C:\\Program Files\\nodejsfichier dans /mnt/c/Users/paul/.npmrc.

Paul Han
la source
1

J'ai résolu ce problème lorsqu'il était affiché sur les terminaux VSCode et JetBrains, mais pas dans le terminal natif à l'aide des commandes suivantes:

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

Cela vous donnera le chemin résolu à la fin:

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

À partir de là, la suppression des fichiers et la relance de VS Code devraient résoudre le problème:

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

lien de correction: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
la source
0

Je cherchais une solution pour le problème de préfixe nvm a trouvé cette question (avant de trouver la solution). Voici mon "dialogue" shell. J'espère que cela peut être utile à quelqu'un. J'ai pu définir un préfixe à l'aide de cet article: https://github.com/npm/npm/issues/6592

Quand j'ai essayé npm config delete prefixou nvm use --delete-prefixavant de l'utiliser npm --prefix="" set prefix "", je n'ai eu que: npm ERR! pas ok code 0

Notez que vous devrez répéter la même procédure avec chaque version de nœud, le préfixe est remis à (dans mon cas) / usr / local après l'installation.

    $ 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
la source
0

J'ai eu ce problème après avoir déplacé mon dossier personnel vers un nouveau lecteur sous Linux. Il a été corrigé en supprimant le dossier .nvm et en réinstallant nvm

Pablo Mescher
la source
0

Je viens de résoudre le problème. J'ai créé un lien symbolique $HOME/.nvmvers le $DEV_ZONE/env/node/nvmrépertoire. J'étais confronté au même problème. Je l' ai remplacé NVM_DIRdans la $HOME/.zshrcfaçon suivante

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

BTW, veuillez installer NVM en utilisant curlwget commande ou pas en utilisant brew. Pour plus d'informations, veuillez consulter le commentaire dans ce numéro sur Github: 855 # issuecomment-146115434

Nur Rony
la source
Qu'en est-il de l'installation nvmavec npm?
Dmitri Zaitsev
1
L'installation de nvm via homebrew est officiellement obsolète et entraîne des problèmes en raison de certaines incompatibilités. La manière officielle est d'utiliser curl / wget, voir github.com/creationix/nvm#install-script voir github.com/creationix/nvm/issues/298#issuecomment-152255091 L' installation via npm n'est pas prise en charge par AFAIK, car nvm installe npm, donc si npm installe également nvm, cela peut entraîner des cas marginaux. Vous pouvez lire à ce sujet sur le problème que j'ai précédemment lié.
Vadorequest
0

J'ai juste une idée. Utilisez le lien symbolique pour résoudre l'erreur et vous pouvez toujours utiliser votre préfixe pour les packages installés globalement. ln -s [your prefix path] [path in the '~/.nvm'] alors vous aurez un dossier symbolique dans le ~/.nvmdossier, mais en fait, vos packages globaux sont toujours installés dans [votre chemin de préfixe]. Ensuite, l'erreur ne s'affichera plus et vous pouvez l'utiliser nvm use **normalement. ps: ça a marché pour moi mac. pps: n'oubliez pas de paramétrer $PATHvotre bindossier npm pour utiliser les packages installés globalement.

XQi
la source
-2

Remarque:
pour supprimer, supprimer ou désinstaller nvm - supprimez simplement le $NVM_DIRdossier (généralement ~/.nvm) que
vous pouvez essayer:
rm -rf ~/.nvm

kaiqiu
la source