node.js - instalar - Npm global no se utiliza?
node js español (4)
Así que anteriormente tuve algunos problemas de npm y seguí algunos comandos de stackoverflow / github issues para intentar solucionarlos. Lo que funcionó ... Kinda. Todo estuvo bien hasta hace poco, cuando me di cuenta de que mis paquetes npm globales en realidad no se estaban leyendo / utilizando.
Así que cada vez que hice un npm -g install xxx, o una actualización. Actualiza la carpeta global, pero no se está utilizando. Así que fui a cavar un poco y encontré esto.
Donde npm está leyendo / usando de
usr/local/lib/node_modules
Donde se instala el global para
Users/Me/.npm-global/lib/node_modules
Así que cada vez que hice una comprobación -g para mis módulos y cosas, todo está bien y actualizado, pero cuando realmente intento ejecutar algo, el comando npm usa el que está en las carpetas más antiguas. Así que básicamente no puedo actualizar o instalar nada usando -g. Y nada entra en la carpeta antigua, que es la que realmente se está utilizando.
¿Cómo resuelvo esto? ¿Se ha jodido algún enlace o perfil?
A continuación, se encuentran los pasos para cambiar el directorio de inicio de las instalaciones npm globales para el usuario que ha iniciado sesión actualmente:
Haga un directorio para instalaciones globales:
mkdir ~/.npm-global
Configure npm para usar la nueva ruta del directorio:
npm config set prefix ''~/.npm-global''
Abra o cree un archivo ~ / .profile y agregue esta línea:
export PATH=~/.npm-global/bin:$PATH
De vuelta en la línea de comandos, actualice las variables de su sistema:
source ~/.profile
Prueba: descargue un paquete globalmente sin usar sudo.
npm install -g <package_name>
En lugar de los pasos 1-5, puede usar la variable ENV correspondiente (por ejemplo, si no desea modificar ~ / .profile):
NPM_CONFIG_PREFIX=~/.npm-global
La configuración anterior no funcionaría si utiliza sudo para instalar los módulos npm, ya que seguirá las configuraciones establecidas para el usuario root.
Necesitas respetar el orden de carga.
Cargando desde
node_modules
CarpetasSi el identificador de módulo pasado a
require()
no es un módulo central y no comienza con''/''
,''../''
o''./''
, entonces Node.js comienza en el directorio principal del módulo actual, y agrega/node_modules
e intenta cargar el módulo desde esa ubicación. El nodo no agregaránode_modules
a una ruta que ya termina ennode_modules
.Si no se encuentra allí, se mueve al directorio principal, y así sucesivamente, hasta que se alcanza la raíz del sistema de archivos.
Por ejemplo, si el archivo en
''/home/ry/projects/foo.js''
llamadorequire(''bar.js'')
, Node.js se vería en las siguientes ubicaciones, en este orden:
/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
Esto permite que los programas localicen sus dependencias, para que no entren en conflicto.
Es posible requerir archivos o submódulos específicos distribuidos con un módulo incluyendo un sufijo de ruta después del nombre del módulo. Por ejemplo,
require(''example-module/path/to/file'')
resolvería lapath/to/file
relación a donde se encuentra elexample-module
. La ruta con sufijo sigue la misma semántica de resolución de módulos.
Parece que esto se trata de la configuración de su prefijo npm. El prefijo global es la carpeta donde npm instalará los paquetes globales.
Primero ejecutaría el siguiente comando para obtener el valor del prefijo global ( https://docs.npmjs.com/cli/prefix )
$ npm prefix -g
Para configurarlo en un valor diferente:
npm config set prefix /usr/local/lib/node_modules
Esto es para la ubicación de sus paquetes globales, ahora necesita verificar que la variable PATH de su terminal esté revisando esta carpeta en busca de archivos binarios.
$ echo $PATH
El comando anterior imprimirá una lista separada por ":" de la ubicación de la carpeta que su shell comprueba en busca de archivos binarios.
Su ubicación global de prefijo npm debería ser parte de esa lista, de su pregunta supongo que esta carpeta / usr / local / lib / node_modules ya lo es.
Solo un pequeño cambio en la respuesta de maxletou, ¿intentó configurar el prefijo de la siguiente manera?
npm config set prefix /usr/local