¿Dónde deberían instalarse mis módulos npm en Mac OS X?

82

Estaba intentando actualizar a phonegaptravés de npmcuando comencé a tener problemas. En pocas palabras, hay dos node_modulesdirectorios en mi computadora.

/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules

Cuando ejecuto npm upgrade -g phonegap, parece que npmactualiza la copia del paquete que reside en /usr/local/lib/node_modules. Sin embargo, si which phonegapencuentro que el enlace simbólico apunta a la instalación anterior en /usr/local/share/npm/lib/node_modules.

Además, cuando intento instalar un paquete independiente como express, los archivos se instalan en el /usr/local/lib/node_modulesdirectorio, pero no se crea ningún enlace simbólico al ejecutable en ninguna parte de mi $PATH.

Dos preguntas:

  • ¿Cuál es el directorio adecuado para los módulos de nodo en Mac OS X?
  • ¿Cómo puedo configurar npmpara vincular ejecutables en mi $PATHcuando instala software?

Puntos extra: ¿El método de instalación nodeafecta la configuración? Hay muchas opciones .


EDITAR : Descubrí que se estaban creando enlaces simbólicos en mi /usr/local/bin, pero mi .bash_profilese configuró /usr/local/share/npm/binantes que /usr/local/binen mi $PATH. Recuerdo vagamente haber agregado esa ruta a mi perfil en algún momento, pero no estoy seguro de por qué.

Entonces, la pregunta ahora es: ¿cómo terminé con dos node_modulesdirectorios diferentes en mi computadora y por qué querría tener mi node_modulesen el share/npm/libsubdirectorio en lugar de en el derecho /usr/local/lib?

Ben Harold
fuente

Respuestas:

114

/usr/local/lib/node_modules es el directorio correcto para los módulos de nodo instalados globalmente.

/usr/local/share/npm/lib/node_modulesNo tiene ningún sentido para mí. Un problema aquí es que está confundido porque hay dos directorios llamados node_modules :

/usr/local/lib/node_modules
/usr/local/lib/node_modules/npm/node_modules

Los últimos parecen ser módulos de nodo que vinieron con Node, por ejemplo lodash, cuando el primero es módulos de nodo que instalé usando npm.

Thomas David Kehoe
fuente
1
¿Cuál es la diferencia entre estos dos nodos? Para los usuarios de OS X se recomienda al instalar utilizar el de nodo. ¿Debería ser mejor pasar a una instalación adecuada de npm?
alicia
2
Instalado npm2 desde macports, sus rutas están ausentes en esas ubicaciones, también como ausentes en / opt / local / share ..
holms
71

Segundo Thomas David Kehoe , con la siguiente advertencia:

Si está utilizando el administrador de versiones de nodo (nvm), sus módulos de nodo global se almacenarán en la versión de nodo que esté utilizando en el momento en que guardó el módulo.

Entonces ~/.nvm/versions/node/{version}/lib/node_modules/.

ginna
fuente
6
Exactamente lo que estaba buscando.
ap_snitch
56
npm root -g

para verificar la ubicación global de npm_modules

lazyTank
fuente
4

Si desea conocer la ubicación de sus paquetes NPM, debe:

which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x  1 t04435  admin    46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

Entonces, dado que npm es un paquete NODE en sí mismo, se instala en la misma ubicación que otros paquetes ( EUREKA ). Entonces, para confirmar, debe cd en node_modules y listar el directorio.

cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed

O

npm root -g

Según el comentario de @anthonygore

T04435
fuente
4
Más fácil: npm root -g
anthonygore
1
para mí, npm root -gy which npmno dio los mismos resultados. Quería desinstalar expo-cliy lo logré eliminando expoy expo-clidirectorios de /usr/local/bin/npm. ¡Gracias @ T04435!
Aleksandar