nvm no es compatible con la opción de "prefijo" de configuración de npm:

208

Estoy tratando de ejecutar otra versión de NodeJS nvmpero obtengo este error:

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

Tengo mi prefijo establecido a propósito para evitarlo sudo npm(consulte https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

¿Hay alguna forma que pueda usar nvmsin perder mi prefijo para los paquetes instalados globalmente?

Dmitri Zaitsev
fuente
Yo uso NPM configuración de prefijo de eliminación de evitar esto, no hay problema hasta ahora
ggdx
@DanWhite Si elimino el prefijo, pierdo desviando mis instalaciones globales a un directorio dedicado.
Dmitri Zaitsev
55
(nvm mantenedor aquí) Ese es el punto. Con nvm, él, no tú, gestiona tus instalaciones globales. Por separado, las instalaciones globales nunca deben compartirse entre las versiones de nodo.
LJHarb
2
Cada copia del nodo viene con su propio npm, que determina su propia configuración.
LJHarb
1
De hecho, cada versión de nodo seleccionada con nvm es por shell, eso es por diseño.
LJHarb

Respuestas:

379

Eliminar y restablecer el prefijo

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

Nota: Cambie el número de versión con el indicado en el mensaje de error.

nvm no es compatible con la opción "prefijo" de configuración npm: actualmente está configurado como "/ usr / local" Ejecutar "prefijo de eliminación de configuración npm" o "uso nvm --delete-prefix v6.11.1 - silencioso" para desactivarlo.


Créditos a @gabfiocchi en Github - "Necesitas sobrescribir el prefijo nvm"

Mick
fuente
10
¡Funcionó como por arte de magia! Solo tuve que tomar mi versión de nodo.
Sirius_B
Parecía tener un enlace simbólico / usr / local / bin / node que haría que el terminal integrado en vscode vea una versión de nodo que no debería haber visto. Seguir los pasos anteriores y luego eliminar el enlace simbólico parece haber solucionado el problema. Mi nodo y NPM se rigen por ahora NVM
Sudhanshu Mishra
Esto funciona perfecto. simplemente no te pierdas establecer el prefijo de la versión del nodo que vas a usar. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Esto solo funciona en la ventana actual. Si abre un nuevo shell o una nueva ventana, debe hacerlo de nuevo.
jtiscione
3
Tengo que hacer esto en orden. 1. uso de nvm --delete-prefix vx.xx --silent 2. npm config delete prefix 3. npm config set prefix $ NVM_DIR / version / node / vx.xx
Shen
66

Tuve el mismo problema y la ejecución npm config delete prefixno me ayudó.

Pero esto hizo:

Después de instalar nvm usando brew, cree el ~/.nvmdirectorio:
$ mkdir ~/.nvm

y agregue las siguientes líneas en ~/.bash_profile:

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

(Compruebe que dispone de ningún otro comando relacionado NVM en cualquiera ~/.bashrco ~/.profileo ~/.bash_profile)

Abra una nueva terminal y esta vez no debería imprimir ningún mensaje de advertencia.
Verifique que nvm esté funcionando ejecutando el nvm --versioncomando.
Después de eso, instale / reinstale NodeJS usando nvm install node && nvm alias default node.

Más información

Lo instalé nvmusando homebrewy luego recibí esta notificación:

Tenga en cuenta que upstream nos ha pedido que hagamos una gestión explícita de nvm a través de Homebrew que no es compatible con ellos y que debe verificar cualquier problema con el método de instalación estándar de nvm antes de informar.

Debe crear el directorio de trabajo de NVM si no existe:

 mkdir ~/.nvm

Agregue lo siguiente a ~/.bash_profilesu archivo de configuración de shell deseado:

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

Puede establecerlo $NVM_DIRen cualquier ubicación, pero dejarlo sin modificar /usr/local/Cellar/nvm/0.31.0destruirá cualquier instalación de Nodo instalada en nvm al actualizar / reinstalar.

Ignorarlo me trajo a este mensaje de error:

nvmno es compatible con la npm configopción "prefijo": actualmente está configurado en "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Ejecutar nvm use --delete-prefix v5.7.1 --silentpara desactivarlo.

Seguí una guía anterior (de homebrew/nvm) y luego descubrí que necesitaba reinstalar NodeJS. Así que lo hice:

nvm install node && nvm alias default node

y fue arreglado

Actualización: el uso de brew para instalar NVM provoca un inicio lento de la Terminal. Puede seguir estas instrucciones para resolverlo.

SMMousavi
fuente
66
nvm alias default nodeparecía ayudarme en mi caso
mirkobrankovic
28
(nvm mantenedor aquí) nvmno es compatible cuando se instala a través de brew. Desinstale y use el método adecuado, el script curl en el archivo Léame.
LJHarb
3
Utilicé el script curl para instalar nvm. Esta respuesta no me funcionó.
intcreator
1
@intcreator Gracias. Terminé haciendo una nueva instalación completa de nodo usando nvm basado en esta guía: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm Y mi bloqueo terminó siendo el que tenía anteriormente instalado usando homebrew, que ya no es compatible. Dejó muchos restos que tardaron un tiempo en eliminarse, y luego tuve que hacerlo rm -rf node_modulesy npm installvolver a ejecutarlo , ya que los directorios ya tenían problemas de permisos.
Jake T.
1
Para la claridad de la posteridad, tuve que hacer un brew remove node -f, que elimina todas las versiones instaladas. Haga esto primero, luego siga la guía en mi enlace anterior, luego elimine node_modules. ¡Deberías obtener una instalación limpia! Creo que también debe instalar npm, que acabo de seguir las instrucciones de un artículo de nodejs.org que apareció cuando lo busqué. npm install npm@latest -gfue el comando, una vez que instala el nodo.
Jake T.
31

Esto puede ser un conflicto con su instalación local de Node (si la tenía instalada de otra manera que no sea NVM en el pasado). Debe eliminar esta instancia de nodo:

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

Después de que no puedas instalar nvm

Curador
fuente
9
¿Desea aumentar su respuesta de solo código con alguna explicación? Los comentarios no son suficientes, porque sus líneas de comando son más complejas de lo que explican. Elabora por qué los detalles de tu respuesta resuelven el problema. Contrasta tu respuesta con las respuestas más antiguas. ¿Qué hace que su respuesta sea un valor agregado a esta pregunta?
Yunnosch
Para mí, la primera línea de código vacía (que agregó recientemente) necesita su propia explicación ...
Yunnosch
Después de cinco meses en StackOverflow, considere realizar el muy ilustrativo recorrido de ayuda guiada .
Yunnosch
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código. Por favor, también trate de no saturar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones!
Filnor
"Después de que no pueda instalar nvm" Entonces, si mi objetivo es usar nvm, ¿no debería hacer esto?
Jake T.
18

Este error puede ocurrir cuando la ruta de la carpeta de instalación de NVM tiene un enlace simbólico .

Explicación

La ruta de instalación predeterminada de NVM es: $HOME/.nvmpero su carpeta de inicio podría ser un enlace simbólico para otra unidad, como mi caso.

Ejemplo, mi carpeta de inicio es un enlace simbólico a otra unidad:

/home/myuser -> /bigdrive/myuser

Esto causa el problema de prefijo.

Solución

En su script de inicio (.bashrc o .zshrc u otro), cambie la carpeta NVM a la ruta directa.

Ej: 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
fuente
¡Gracias! Tu respuesta debería tener más visibilidad
ben
No Me frié el cerebro para entender este loco error. No encontré ninguna publicación que me ayudara. Tuve que luchar mucho para resolver el problema. Estoy feliz de ayudarte. Vota mi respuesta para que sea más visible.
André Avelar
mi echod $ NVM_DIR era "/Users/vijayshanker/.nvm" debería poner "export NVM_DIR =" / Users / vijayshanker / .nvm (y el resto) "en bashrc, lo intenté pero aún no lo solucioné, estuve luchando por 6 horas, por favor nota de ayuda: no tengo npm instalado, no instalé mi nodo desde npm
vijay shanker
Una solución puede ser exportar NVM_DIR = $ (readlink -f "$ HOME / .nvm") en .bashrc o en la línea de comandos. Esto eliminará todos los enlaces simbólicos de $ HOME / .nvm y exportará una ruta completa sin formato con solo directorios reales.
Nimlar
10

Me encontré con esto mientras usaba el nodo instalado vía nvm, con nvminstalado vía homebrew. Lo resolví ejecutando brew uninstall nvm, rm -rf $NVM_DIRy luego reinstalando nvm usando el script de instalación oficial y reinstalando la versión de nodo que necesitaba.

Nota: también había $NVM_DIRmontado y vinculado. Lo volví a poner en mi hogar.

Lane Rettig
fuente
9

Puede ser el problema si tiene su directorio de inicio montado en alguna parte, debido a que nvm no funciona correctamente con enlaces simbólicos. Como no me importa dónde se encuentra mi $ NVM_DIR, ejecuto esto y todo funciona bien:

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

ingrese la descripción de la imagen aquíTuve el mismo problema y fue realmente molesto cada vez con el terminal. Ejecuté el comando en la terminal y se solucionó

Para aquellos que intenten eliminar nvm de brew

puede que no sea suficiente simplemente preparar desinstalar nvm

si ve que el prefijo npm sigue siendo / usr / local, ejecute este comando

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

Panayiotis Georgiou
fuente
4

Tengo el mismo mensaje de error pero otra solución. La ruta autogenerada durante curl (install.sh) no coincide. Comprueba esto con:

echo $NVM_DIR

En mi caso: /var/www//.nvm. Muestre en su archivo bash generado automáticamente y cámbielo y reemplácelo: (~ / .bash_profile, ~ / .zshrc, ~ / .profile o ~ / .bashrc)

reemplazar

export NVM_DIR="$HOME/.nvm"

con (por ejemplo)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
fuente
Vine aquí para poner el mismo comentario :) En mi caso fue porque cuando creé el usuario configuré la página de inicio como useradd --home / home / user / con el final / eliminé el archivo / etc / passwd y todo comenzó a funcionar de nuevo
Israel
1

Seguí la respuesta https://stackoverflow.com/a/47861348/2391795 pero no funcionó bien.

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

Después de ejecutar los comandos recomendados, mi nvm ya no funcionaba, la ejecución nvm usemostraría la versión de nodo adecuada que se está utilizando, pero la ejecución node -vmostrará otra. Ya no era posible cambiar la versión del nodo.

Desinstalé y reinstalé nvm por completo para solucionarlo. Seguí https://github.com/creationix/nvm#manual-uninstall ejecutando

$ rm -rf "$NVM_DIR"

Luego edité mi .zshrcpara eliminar las líneas relacionadas con nvm, que en mi caso eran

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"

Luego comenzó un nuevo shell (para que nvm no se cargue en este nuevo shell) y ejecutó https://github.com/creationix/nvm#install-script

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

Lo cual agregó nvm las líneas que previamente había eliminado en mi .zshrc.

Entonces pude usar nvm como solía hacerlo. Supongo que es un caso extraño en el que las cosas salieron mal y me obligaron a reinstalar todo, no parece que la mayoría de las personas pasen por esto debido a este problema.

Vadorequest
fuente
1

Déjame describir mi situación.

Primero, verifique la configuración actual

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

Entonces, encontré la configuración de error en la salida:

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

Entonces, C:\\Program Files\\nodejseliminé el /mnt/c/Users/paul/.npmrc.

Paul Han
fuente
1

Resolví este problema cuando se mostraba en VSCode y JetBrains Terminals, pero no en la terminal nativa usando los siguientes comandos:

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

Esto le dará la ruta resuelta al final:

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

A partir de ahí, eliminar los archivos y reiniciar VS Code debería solucionar el 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

enlace de reparación: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
fuente
0

Estaba buscando una solución para el problema de prefijo nvm y encontré esta pregunta (antes de encontrar la solución). Aquí está mi "diálogo" de shell. Espero que pueda ser útil para alguien. Pude configurar el prefijo con la ayuda de esta publicación: https://github.com/npm/npm/issues/6592

Cuando probé npm config delete prefixo nvm use --delete-prefixantes de usar npm --prefix="" set prefix "", solo obtuve: npm ERR! no está bien código 0

Tenga en cuenta que tendrá que repetir el mismo procedimiento con cada versión de nodo, el prefijo se vuelve a configurar (en mi caso) / usr / local después de la instalación.

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

Tuve este problema después de mover mi carpeta de inicio a una nueva unidad en Linux. Se solucionó eliminando la carpeta .nvm y reinstalando nvm

Pablo Mescher
fuente
0

Acabo de resolver el problema. Hice un enlace simbólico $HOME/.nvmal $DEV_ZONE/env/node/nvmdirectorio. Estaba enfrentando el mismo problema. Reemplacé NVM_DIRde la $HOME/.zshrcsiguiente manera

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

Por cierto, instale NVM usando curlo wgetcomando no usando brew. Para obtener más información, consulte el comentario en este número en Github: 855 # issuecomment-146115434

Nur Rony
fuente
¿Qué hay de instalar nvmcon npm?
Dmitri Zaitsev
1
La instalación de nvm a través de homebrew está oficialmente en desuso y genera problemas debido a algunas incompatibilidades. La forma oficial es usar curl / wget, consulte github.com/creationix/nvm#install-script, consulte github.com/creationix/nvm/issues/298#issuecomment-152255091 La instalación a través de npm no es compatible con AFAIK, porque se instala nvm npm, por lo que si npm también instala nvm, puede generar casos extremos. Puedes leer sobre esto en el tema que he vinculado anteriormente.
Vadorequest
0

Solo tengo una idea. Use el enlace simbólico para resolver el error y aún puede usar su prefijo para paquetes instalados globalmente. ln -s [your prefix path] [path in the '~/.nvm'] entonces tendrá una carpeta simbólica en la ~/.nvmcarpeta, pero de hecho, sus paquetes globales todavía están instalados en [su ruta de prefijo]. Entonces el error no volverá a aparecer y puede usarlo nvm use **normalmente. PD: me ha funcionado mac. pps: no olvide configurar $PATHsu bincarpeta npm para usar los paquetes instalados globalmente.

XQi
fuente
-2

Nota:
para eliminar, eliminar o desinstalar nvm, simplemente elimine la $NVM_DIRcarpeta (por lo general ~/.nvm)
puede intentar:
rm -rf ~/.nvm

kaiqiu
fuente