¿Ubicación de instalación global de npm en Windows?

86

No estoy 100% seguro, pero creo que instalé el nodo v5 desde el instalador de Windows en las PC de mi hogar y mi oficina.

En mi PC doméstica, las instalaciones globales ocurren por debajo de% APPDATA%:

(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd

mientras estoy en la PC de mi oficina, van debajo de los archivos de programa:

(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd

Necesito proporcionar la ruta completa a varias de estas herramientas globales al observador de archivos de PyCharm, y dado que el archivo del proyecto que compartí, tendría sentido no tener recursos globales en una carpeta de usuario.

¿Por qué las instalaciones globales terminarían en carpetas diferentes y cómo puedo forzarlas a una ubicación que sea común para todos los miembros del equipo?

thebjorn
fuente
3 años después, tuve un misterio similar. La respuesta resultó ser que el nodo había creado una unión en c: \ program files \ nodejs, que en realidad apuntaba a% appdata% \ nvm \ v8.10.0. Así que dio la ilusión de que podría encajar con lo que vio.
John Hatton
1
El enlace simbólico c: \ program files \ nodejs resultó ser un artefacto de nvm
John Hatton

Respuestas:

66

Según: https://docs.npmjs.com/files/folders

  • Instalación local (predeterminado): coloca cosas en ./node_modules de la raíz del paquete actual.
  • Instalación global (con -g): coloca cosas en / usr / local o donde esté instalado el nodo.
  • Instálelo localmente si lo va a requerir ().
  • Instálelo globalmente si lo va a ejecutar en la línea de comando. -> Si necesita ambos, instálelo en ambos lugares o use el enlace npm.

Configuración de prefijo

La configuración del prefijo tiene como valor predeterminado la ubicación donde está instalado el nodo. En la mayoría de los sistemas, esto es /usr/local. En Windows, esta es la ubicación exacta del binario node.exe .

Los documentos pueden estar un poco desactualizados, pero explican por qué las instalaciones globales pueden terminar en diferentes directorios:

(dev) go|c:\srv> npm config ls -l | grep prefix
; prefix = "C:\\Program Files\\nodejs" (overridden)
prefix = "C:\\Users\\bjorn\\AppData\\Roaming\\npm"

Según las otras respuestas, puede parecer que la anulación es ahora la ubicación predeterminada en Windows y que es posible que haya instalado mi versión de oficina antes de que se implemente esta anulación.

Esto también sugiere una solución para hacer que todos los miembros del equipo tengan globales almacenados en la misma ruta absoluta en relación con su PC, es decir (ejecutar como Administrador):

mkdir %PROGRAMDATA%\npm
setx PATH "%PROGRAMDATA%\npm;%PATH%" /M
npm config set prefix %PROGRAMDATA%\npm

abra una nueva ventana de cmd.exe y reinstale todos los paquetes globales.

Explicación (por lineno.):

  1. Cree una carpeta en una ubicación adecuada para contener los globales (Microsoft insiste en que no debe escribir en ProgramFiles, por lo que% PROGRAMDATA% parece el siguiente lugar lógico.
  2. El directorio debe estar en la ruta, así que use setx .. /Mpara establecer la ruta del sistema (en HKEY_LOCAL_MACHINE). Esto es lo que requiere que lo ejecutes en un shell con permisos de administrador.
  3. Dile npmque uses este nuevo camino. (Nota: la carpeta no está visible en% PATH% en este shell, por lo que debe abrir una nueva ventana).
thebjorn
fuente
Advertencia: por alguna razón, el comando setx PATH "%PROGRAMDATA%\npm;%PATH%" /Mno antepondrá un nuevo valor, pero lo reemplazará todo (en PowerShell).
Rubens Mariuzzo
47

Estas son rutas típicas de npm si instala un paquete globalmente:

Windows XP -             %USERPROFILE%\Application Data\npm\node_modules
Newer Windows Versions - %AppData%\npm\node_modules
or -                     %AppData%\roaming\npm\node_modules
Dennis Stücken
fuente
1
Hmm ... %APPDATA%está debajo de una carpeta de usuario, y PyCharm no parece aceptar variables de entorno, así que supongo que esto no es válido.
thebjorn
7
esto es incorrecto corrija su respuesta ~ / AppData / Roaming / npm / node_modules $ npm / c / Users / Phil / AppData / Roaming / npm / npm: línea 12: nodo: comando no encontrado
Philip Rego
Desde la instalación del paquete globalmente a través de Powershell, se creó cmd_auto_fileun Windows PowerShell Scriptarchivo genérico, un archivo y un archivo en"$env:APPDATA\npm"
Olov
18

Simplemente presione el botón de Windows y escriba% APPDATA% y escriba enter.

Arriba está la ubicación donde puede encontrar la carpeta \ npm \ node_modules. Aquí es donde se ubican los módulos globales en su sistema.

Subhan más afortunado
fuente
1
Si miras mi pregunta, encontrarás que tu afirmación es falsa. Los módulos globales también se pueden instalar debajo %PROGRAMFILES%\nodejs, que es mi primera pregunta (¿por qué terminan en carpetas diferentes en las PC de mi hogar / oficina?). El contexto de mi pregunta (como se indica ...) es que necesito proporcionar la ruta a estas herramientas instaladas globalmente de npm al IDE de PyCharm, para que otros miembros del equipo se beneficien de que las configure correctamente para nuestros proyectos. Dado que (a) PyCharm no permite env vars al especificar ejecutable, y (b) %APPDATA%=c:\Users\bjorn\..no puedo usar APPDATA aquí.
thebjorn
-1

Si solo está tratando de averiguar dónde está instalando npm su módulo global (el título de este hilo), mire el resultado al ejecutar npm install -g sample_module

$ npm install -g sample_module C: \ Users \ user \ AppData \ Roaming \ npm \ sample_module -> C: \ Users \ user \ AppData \ Roaming \ npm \ node_modules \ sample_module \ bin \ sample_module.js + [email protected] actualizado 1 paquete en 2.821s

java-addict301
fuente
La pregunta es toda la pregunta, no solo el título. No creo que esta sea una respuesta a mi pregunta.
thebjorn
@thebjorn No creo que el título de su pregunta sea lo suficientemente específico y, por lo tanto, la gente como yo lo encontrará si busca la ubicación de instalación de npm, no busca cómo cambiarla o por qué hay carpetas diferentes, etc.
java- addict301
La respuesta aceptada contiene la respuesta a su pregunta:, npm config ls -l | grep prefixe incluso si no fuera así, el procedimiento correcto sería hacer una nueva pregunta con un enfoque más estrecho ...
thebjorn
Definitivamente no es más fácil, ya que tiene que instalar algo en lugar de simplemente buscar algo (lo que lo hace inutilizable, por ejemplo, para scripts de shell / bat).
thebjorn
Es si está tratando de averiguar dónde se colocan sus módulos globales durante las instalaciones (como fue mi caso y probablemente el de otros que encontrarán esta pregunta en función de su título actual).
java-addict301