nvm non è compatibile con l'opzione "prefisso" di npm config:


208

Sto cercando di eseguire un'altra versione di NodeJS nvmma ricevendo questo errore:

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

Ho il mio prefisso impostato appositamente per evitare sudo npm(vedi https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Esiste un modo per utilizzare nvmsenza perdere il prefisso per i pacchetti installati a livello globale?


Uso npm config delete prefix per aggirare questo problema, nessun problema finora
ggdx

@DanWhite Se cancello il prefisso, perdo il trasferimento delle mie installazioni globali in una directory dedicata.
Dmitri Zaitsev il

5
(nvm maintainer qui) Questo è il punto. Con nvm, non tu gestisci le tue installazioni globali. Separatamente, le installazioni globali non dovrebbero mai essere condivise tra le versioni dei nodi.
LJHarb

2
Ogni copia del nodo viene fornita con il proprio npm, che determina le proprie impostazioni.
LJHarb

1
In effetti, ogni versione del nodo selezionato con nvm è per shell - questo è di progettazione.
LJHarb

Risposte:


379

Elimina e ripristina il prefisso

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

Nota: modificare il numero di versione con quello indicato nel messaggio di errore.

nvm non è compatibile con l'opzione "prefisso" di npm config: attualmente impostato su "/ usr / local" Esegui "npm config delete prefix" o "nvm usa --delete-prefix v6.11.1 --silent" per deselezionarlo.


Crediti a @gabfiocchi su Github - "Devi sovrascrivere il prefisso nvm"


10
Questo ha funzionato come un fascino! Dovevo solo prendere la mia versione del nodo.
Sirius_B,

Mi sembrava di avere un link simbolico / usr / local / bin / node che avrebbe fatto sì che il terminale integrato in vscode vedesse una versione del nodo che non avrebbe dovuto vedere. Seguire i passaggi precedenti e quindi eliminare il collegamento simbolico sembra aver risolto il problema. Il mio nodo e npm sono governati da nvm ora
Sudhanshu Mishra il

funziona perfettamente. non mancate di impostare il prefisso per la versione del nodo, che userete. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren,

3
Funziona solo nella finestra corrente. Se apri una nuova shell o una nuova finestra, devi ripetere tutto da capo.
jtiscione,

3
Devo fare questi in ordine. 1. nvm usa --delete-prefix vx.xx --silent 2. npm config elimina prefisso 3. npm config imposta prefisso $ NVM_DIR / version / node / vx.xx
Guangtong Shen

66

Ho avuto lo stesso problema e l'esecuzione npm config delete prefixnon mi ha aiutato.

Ma questo ha fatto:

Dopo aver installato nvm usando brew, crea la ~/.nvmdirectory:
$ mkdir ~/.nvm

e aggiungi le seguenti righe in ~/.bash_profile:

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

(Controlla di non avere altri comandi nvm in nessuno ~/.bashrco ~/.profileo ~/.bash_profile)

Apri un nuovo terminale e questa volta non dovrebbe stampare alcun messaggio di avviso.
Verificare che nvm funzioni eseguendo il nvm --versioncomando.
Successivamente, installa / reinstalla NodeJS usandonvm install node && nvm alias default node .

Ulteriori informazioni

Ho installato nvmutilizzando homebrewe successivamente ho ricevuto questa notifica:

Si prega di notare che upstream ci ha chiesto di rendere esplicita la gestione di nvm tramite Homebrew da loro non supportata e si dovrebbe verificare eventuali problemi con il metodo di installazione standard di nvm prima della segnalazione.

È necessario creare la directory di lavoro di NVM se non esiste:

 mkdir ~/.nvm

Aggiungere quanto segue al ~/.bash_profilefile di configurazione della shell desiderato:

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

È possibile impostare $NVM_DIRin qualsiasi posizione, ma lasciandolo invariato da /usr/local/Cellar/nvm/0.31.0distruggerà tutte le installazioni di nodi installate da nvm durante l'aggiornamento / la reinstallazione.

Ignorarlo mi ha portato a questo messaggio di errore:

nvmnon è compatibile con l' npm configopzione "prefisso": attualmente impostato su "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Esegui nvm use --delete-prefix v5.7.1 --silentper annullarlo.

Ho seguito una guida precedente (da homebrew/nvm) e successivamente ho scoperto che dovevo reinstallare NodeJS. Così ho fatto:

nvm install node && nvm alias default node

ed è stato risolto.

Aggiornamento: l' utilizzo di brew per installare NVM provoca un lento avvio del Terminale. Puoi seguire queste istruzioni per risolverlo.


6
nvm alias default nodesembrava aiutarmi nel mio caso
mirkobrankovic,

28
(nvm maintainer qui) nvmnon è supportato se installato tramite brew. Disinstallalo e usa il metodo corretto, lo script curl nel file Leggimi.
LJHarb

3
Ho usato lo script curl per installare nvm. Questa risposta non ha funzionato per me.
creatore

1
@intcreator Grazie. Ho finito per fare una nuova installazione completa del nodo usando nvm basato su questa guida: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm E il mio hangup è stato quello che avevo precedentemente installato usando homebrew, che non è più supportato. Rimanevano molti resti che richiedevano un po 'di tempo per essere cancellati, e poi ho dovuto rm -rf node_modulesed eseguire di npm installnuovo, poiché le directory avevano già problemi di permessi.
Jake T.

1
Per la chiarezza dei posteri, ho dovuto fare un brew remove node -f, che rimuove tutte le versioni installate. Fallo prima, quindi segui la guida nel mio link sopra, quindi rimuovi node_modules. Dovresti ottenere un'installazione pulita! Penso che anche tu debba installare npm, che ho appena seguito le istruzioni di un articolo di nodejs.org che è apparso quando l'ho cercato. npm install npm@latest -gera il comando, una volta installato il nodo.
Jake T.

31

Questo potrebbe essere in conflitto con l'installazione locale di Node (se in passato l'avevi installata in un modo diverso da NVM). È necessario eliminare questa istanza del nodo:

  1. rimuovere node_modules sudo rm -rf /usr/local/lib/node_modules
  2. rimuovi nodo sudo rm /usr/local/bin/node
  3. rimuovere il collegamento al nodo cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Dopo aver impossibile installare nvm


9
Vorresti aumentare la tua risposta solo in codice con qualche spiegazione? I commenti non sono sufficienti, perché le tue linee di comando sono più intricate di quelle spiegate da loro. Elaborare perché i dettagli della tua risposta risolvono il problema. Contrasta la tua risposta con le risposte più vecchie di anni. Cosa rende la tua risposta un valore aggiunto a questa domanda?
Yunnosch,

Per me, la prima riga di codice vuota (che hai recentemente aggiunto) ha bisogno di una sua spiegazione ...
Yunnosch,

Dopo cinque mesi su StackOverflow, prendi in considerazione l'idea di fare un tour guidato di guida molto illuminante .
Yunnosch,

Sebbene questo frammento di codice possa risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che in futuro stai rispondendo alla domanda dei lettori e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Si prega inoltre di cercare di non riempire il codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni!
Filnor,

"Dopo che non puoi installare nvm" Quindi, se il mio obiettivo è usare nvm, non dovrei farlo?
Jake T.,

18

Questo errore può verificarsi quando il percorso della cartella di installazione di NVM ha un collegamento simbolico .

Spiegazione

Il percorso di installazione predefinito di NVM è: $HOME/.nvm ma la tua cartella home potrebbe essere un collegamento simbolico per un'altra unità, come nel mio caso.

Esempio, la mia cartella principale è un collegamento simbolico a un'altra unità:

/home/myuser -> /bigdrive/myuser

Ciò causa il problema con il prefisso.

Soluzione

Sul tuo script di avvio (.bashrc o .zshrc o altro), modifica la cartella NVM nel percorso diretto.

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"

Grazie! La tua risposta dovrebbe avere maggiore visibilità
ben

No. Mi sono fritto il cervello per capire questo folle errore. Non ho trovato nessun post che mi abbia aiutato. Ho dovuto lottare duramente per risolvere il problema. Sono felice di aiutarti. Vota la mia risposta per essere più visibile.
André Avelar,

il mio ec $ $ NVM_DIR era "/Users/vijayshanker/.nvm" dovrei mettere "export NVM_DIR =" / Users / vijayshanker / .nvm (e il resto) "in bashrc, provato ma ancora non risolto, lottando per 6 ore, ti preghiamo di notare che non ho installato npm, non ho installato il mio nodo da npm
vijay shanker

una soluzione potrebbe forse esportare NVM_DIR = $ (readlink -f "$ HOME / .nvm") in .bashrc o nella riga di comando. Questo rimuoverà tutti i collegamenti simbolici da $ HOME / .nvm ed esporterà un percorso completo semplice con solo directory reali.
Nimlar

10

Mi sono imbattuto in questo durante l'utilizzo del nodo installato tramite nvm, con nvminstallato tramite homebrew. L'ho risolto eseguendo brew uninstall nvm, rm -rf $NVM_DIRquindi reinstallando NVID usando lo script di installazione ufficiale e reinstallando la versione del nodo di cui avevo bisogno.

Nota: avevo anche $NVM_DIRmontato e collegato simbolicamente. L'ho riportato nel mio homedir.


9

Potrebbe essere il problema se hai installato la tua home directory da qualche parte, perché nvm non funziona correttamente con i collegamenti simbolici. Perché non mi interessa dove si trova $ NVM_DIR, eseguo questo e tutto funziona bene:

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

6

inserisci qui la descrizione dell'immagineHo avuto lo stesso problema ed è stato davvero fastidioso ogni volta con il terminale. Eseguo il comando sul terminale ed è stato risolto

Per quelli provare a rimuovere nvm dalla birra

potrebbe non essere sufficiente preparare la disinstallazione di nvm

se vedi che il prefisso npm è ancora / usr / local, esegui questo comando

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


4

Ho lo stesso messaggio di errore ma altra soluzione. Il percorso generato automaticamente durante l'arricciatura (install.sh) non corrisponde. Verifica questo con:

echo $NVM_DIR

Nel mio caso: /var/www//.nvm. Mostra nel tuo file bash generato automaticamente e modificalo e sostituiscilo: (~ / .bash_profile, ~ / .zshrc, ~ / .profile o ~ / .bashrc)

sostituire

export NVM_DIR="$HOME/.nvm"

con (ad es.)

export NVM_DIR="$HOME.nvm"

Sono venuto qui per inserire lo stesso commento :) Nel mio caso è stato perché quando ho creato l'utente ho impostato la home come useradd --home / home / user / con il trailing / ho rimosso dal file / etc / passwd e tutto ha iniziato a funzionare di nuovo
Israele,

1

Ho seguito la risposta https://stackoverflow.com/a/47861348/2391795 ma non ha funzionato bene.

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

Dopo aver eseguito i comandi consigliati, il mio nvm non funzionava più, l'esecuzione nvm usemostrava la versione corretta del nodo in uso, ma l'esecuzione node -vne mostrava un'altra. Non è più possibile cambiare la versione del nodo.

Ho disinstallato e reinstallato nvm interamente per risolverlo. Ho seguito https://github.com/creationix/nvm#manual-uninstall eseguendo

$ rm -rf "$NVM_DIR"

Quindi ho modificato my .zshrcper rimuovere le righe relative a nvm, che nel mio caso erano

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"

Quindi ha avviato una nuova shell (in modo che nvm non sia caricato in questa nuova shell) ed eseguito https://github.com/creationix/nvm#install-script

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

Che ha aggiunto nvm le linee che avevo precedentemente rimosso nel mio .zshrc .

Quindi sono stato in grado di utilizzare nvm come una volta. Immagino che sia un caso strano dove le cose sono andate male e mi hanno costretto a reinstallare tutto, non sembra che la maggior parte delle persone lo attraversi a causa di questo problema.


1

Lasciami descrivere la mia situazione.

Innanzitutto, controlla la configurazione corrente

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

Quindi, ho trovato la configurazione dell'errore nell'output:

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

Quindi, ho eliminato C:\\Program Files\\nodejsin /mnt/c/Users/paul/.npmrc.


1

Ho risolto questo problema quando veniva visualizzato su Terminali VSCode e JetBrains, ma non nel terminale nativo utilizzando i seguenti comandi:

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

Questo ti darà il percorso risolto alla fine:

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

Da lì, rimuovere i file e riavviare VS Code dovrebbe risolvere il problema:

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

collegamento di correzione: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774


0

Stavo cercando una soluzione per il problema del prefisso nvm e ho trovato questa domanda (prima di trovare la soluzione). Ecco la mia "finestra" di shell. Spero che possa essere utile per qualcuno. Sono stato in grado di impostare il prefisso con l'aiuto di questo post: https://github.com/npm/npm/issues/6592

Quando ho provato npm config delete prefixo nvm use --delete-prefixprima di utilizzare npm --prefix="" set prefix "", ho ricevuto solo: npm ERR! non ok codice 0

Nota che dovrai ripetere la stessa procedura con ogni versione di nodo, il prefisso è riportato su (nel mio caso) / usr / local dopo l'installazione.

    $ 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

0

Ho avuto questo problema dopo aver spostato la mia cartella home su una nuova unità su Linux. È stato risolto rimuovendo la cartella .nvm e reinstallando nvm


0

Ho appena risolto il problema. Ho linkato $HOME/.nvmalla $DEV_ZONE/env/node/nvmdirectory. Stavo affrontando lo stesso problema. Ho sostituito NVM_DIRnel $HOME/.zshrcmodo seguente

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

A proposito, si prega di installare NVM utilizzando curlo il wgetcomando non utilizzando brew. Per ulteriori informazioni, consultare il commento in questo numero su Github: 855 # issuecomment-146115434


Che dire dell'installazione nvmcon npm?
Dmitri Zaitsev,

1
L'installazione di nvm tramite homebrew è ufficialmente deprecata e causa problemi dovuti a incompatibilità. Il modo ufficiale è usare curl / wget, vedi github.com/creationix/nvm#install-script vedi github.com/creationix/nvm/issues/298#issuecomment-152255091 L' installazione tramite npm non è supportata AFAIK, perché nvm installa npm, quindi se npm installa anche nvm può portare a casi limite. Puoi leggere a riguardo sul problema che ho precedentemente collegato.
Vadorequest,

0

Ho solo un'idea. Utilizza il collegamento simbolico per risolvere l'errore e puoi comunque utilizzare il prefisso per i pacchetti installati a livello globale. ln -s [your prefix path] [path in the '~/.nvm'] allora avrai una cartella simbolica nella ~/.nvmcartella, ma in effetti i tuoi pacchetti globali sono ancora installati nel [tuo percorso prefisso]. Quindi l'errore non verrà più visualizzato e sarà possibile utilizzarlo nvm use **normalmente. ps: ha funzionato per me mac. pps: non dimenticare di impostare $PATHla bincartella npm per utilizzare i pacchetti installati a livello globale.


-2

Nota:
per rimuovere, eliminare o disinstallare nvm - basta rimuovere la $NVM_DIRcartella (di solito ~/.nvm)
puoi provare:
rm -rf ~/.nvm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.