Nodejs no puede encontrar el módulo instalado en Windows

240

Estoy aprendiendo nodejs en este momento en Windows. Varios módulos se instalan globalmente con npm.cmd, y nodejs no pudo encontrar los módulos instalados. Toma jade por ejemplo,

npm install jade -g

Jade está instalado en el directorio "C:\Program Files (x86)\nodejs\node_modules", pero el siguiente código fallará con un "Cannot find module 'jade'"error,

var jade = require('jade');

Sin embargo, el código se ejecutará con éxito cuando jade esté instalado localmente (sin la opción -g en npm). No quiero usar módulos instalados localmente, es una pérdida de espacio en disco para mí. ¿Cómo puedo hacer que los módulos instalados globalmente funcionen en Windows?

Cosmore
fuente
3
@AmolMKulkarni: no estoy seguro de cómo eso es relevante aquí. Agregar '.js' al requerimiento no resuelve el problema en Windows.
Dan Dascalescu
1
@DanDascalescu: Creo que entendiste mal la respuesta. El código dado en esa respuesta es un código de Node.js, que muestra cómo se ve el paquete que necesita. Entonces, si comprende dónde y cómo se ven los archivos, puede resolver su problema más fácilmente.
Amol M Kulkarni
De acuerdo con stackoverflow.com/questions/5817874/… npm install forever -g
Sharif Yazdian

Respuestas:

349

Agregue una variable de entorno llamada NODE_PATHy configúrela en %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10), o donde npm termine instalando los módulos en su versión de Windows. Para hacerlo de una vez por todas, agregue esto como una variable del Sistema en la pestaña Avanzado del cuadro de diálogo Propiedades del sistema (ejecutar control.exe sysdm.cpl,System,3).

La solución rápida en Windows 7+ es simplemente ejecutar:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Vale la pena mencionar que NODE_PATHsolo se usa al importar módulos en aplicaciones Node. Cuando desee utilizar los binarios de módulos instalados globalmente en su CLI, debe agregarlos también a su PATH, pero sin node_modulesparte (por ejemplo, %AppData%\npmen Windows 7/8/10).


Vieja historia

Soy bastante nuevo en node.js, así que no puedo estar completamente en lo cierto, pero desde mi experiencia funciona de esta manera:

  1. -g no es una forma de instalar bibliotecas globales, es solo una forma de colocarlas en la ruta del sistema para que pueda llamarlas desde la línea de comandos sin escribir la ruta completa en ellas. Es útil, por ejemplo, entonces la aplicación de nodo está convirtiendo archivos locales, como menos ; si la instala globalmente, puede usarla en cualquier directorio.
  2. node.js en sí mismo no miró el directorio global npm, está usando otro algoritmo para encontrar los archivos requeridos: http://nodejs.org/api/modules.html#modules_file_modules (básicamente escanea cada carpeta en la ruta, comenzando de la carpeta actual para node_modules y la verifica).

Vea una pregunta similar para obtener más detalles: ¿Cómo instalo un módulo globalmente usando npm?

Alexey Ivanov
fuente
17
Muchas gracias, los enlaces que proporcionó son muy útiles, ahora estoy mucho más claro, aunque el algoritmo de búsqueda de módulos parece un poco complicado. Finalmente, uso la variable de entorno NODE_PATH para hacer referencia a la ruta global del módulo set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, y funciona como se esperaba. Es extraño que los módulos instalados globalmente se coloquen en '% USERPROFILE% \ Application Data \ npm \ node_modules' en Windows, mientras tanto, no puede haber comillas en NODE_PATH.
Cosmore
2
Encantado de ayudar. ¿No cambió NODE_PATH rompió la ruta a módulos node.js estándar, como FS?
Alexey Ivanov
2
Incluso me preguntaba por C:\Program Files\nodejs\node_modules\npm\node_modulesqué no tengo el módulo que acabo de instalar usando npm install -g expressy estaba disponible enC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske
1
en Windows 8 el camino es%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar
99
Si desea averiguar dónde está su directorio global node_modules, ejecute el comando npm list -g. La primera línea de salida será el padre del directorio global node_modules; en otras palabras, el directorio global node_modules es {output}\node_modules. También imprime el directorio de instalación cuando ejecutanpm install --global {xyz}
cowlinator
34

si está en la plataforma windows7, tal vez debería cambiar el NODE_PATH de esta manera: %AppData%\npm\node_modules

Jack
fuente
77
también está en appdata \ roaming en windows 8
JonnyRaa
66
Estoy en Windows 8.1 con npm 2.5.1, y tengo mi NODE_PATH configurado como documentado, pero todavía no puedo encontrar mis paquetes instalados. Pensamientos?
JaKXz
55
En Windows 10 debería ser solo% AppData% \ npm
gkiely
En mi caso (W10) fue% AppData% \ Roaming \ npm
Hinrich
32

Sé que puedo despertar a un zombie, pero creo que esto sigue siendo un problema, si necesita acceso global a los módulos de nodo en Windows 7, debe agregar esto a su ruta de variable global:

C:\Users\{USER}\AppData\Roaming\npm

Importante: solo esto sin la node_modulesparte, me tomó media hora para ver esto.

Vitaliy Terziev
fuente
44
Alternativamente, para usuarios de Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson
44
Gracias por el consejo sobre la eliminación de la node_modulespieza, ¡estaba luchando con esto también!
danguilherme
20

Para que funcione en Windows 10, lo resolví agregando la carpeta %USERPROFILE%\AppData\Roaming\npma mi RUTA. Después de haber \node_modulesagregado esto: %USERPROFILE%\AppData\Roaming\npm\node_modules\no funcionó para mí.

Andi-lo
fuente
77
O, más simplemente, `% AppData% \ npm`
Dan Diplo
¡Qué raro que funcionó! He estado buscando este problema durante dos días, literalmente. Esta es la solución más oscura que he probado y la primera que funcionó. Muchas gracias.
Será
sí, solo agregue al pathentorno variabele, luego podemos ejecutarlo directamente en Windows 10
Zhu Xiaohu
1
Mostraría cómo realizar esto realmente con un ejemplo, en lugar de decir cosas como "simplemente agregar a ..."
Gabe Hiemstra
14

Solo citaré de la publicación de blog de este nodo ...

En general, la regla general es:

  • Si está instalando algo que desea usar en su programa, usando require ('lo que sea'), luego instálelo localmente, en la raíz de su proyecto.
  • Si está instalando algo que desea usar en su shell, en la línea de comando o algo así, instálelo globalmente, de modo que sus binarios terminen en su variable de entorno PATH.

...

Por supuesto, hay algunos casos en los que desea hacer ambas cosas. Coffee-script y Express son buenos ejemplos de aplicaciones que tienen una interfaz de línea de comandos, así como una biblioteca. En esos casos, puede hacer uno de los siguientes:

  1. Instálalo en ambos lugares. En serio, ¿tienes poco espacio en el disco? Está bien, de verdad. Son pequeños programas de JavaScript.
  2. Instálelo globalmente, y luego npm link coffee-script o npm link express (si está en una plataforma que admite enlaces simbólicos). Entonces solo necesita actualizar la copia global para actualizar también todos los enlaces simbólicos.
marko
fuente
10
They’re tiny JavaScript programs.¡Algunas de estas bibliotecas ciertamente no son pequeñas!
UpTheCreek
1
@UpTheCreek Estoy seguro de que se refería al tamaño en el ámbito del espacio en disco. Son archivos de texto. Son objetivamente pequeños.
Phillip Copley
12

Para abreviar, utilícelo npm link jadeen el directorio de su aplicación.

Sơn Trần-Nguyễn
fuente
44
Parece npm link jadeque no puede funcionar en Windows, npm devuelve un mensaje de error de la siguiente manera:npm ERR! Error: npm link not supported on windows
Cosmore
1
Lo hace ahora, en cuanto a la versión v0.8.9
Gianfranco P.
@beyonddoor: debe ejecutar npm linkdesde una ventana de comandos del Administrador.
Mrchief
12

Intenté agregar / editar variables de entorno y llegar a la conclusión de que:

  1. Editar / agregar User variables(del cuadro superior) en lugar de System variables(de la parte inferior); de lo contrario, debe "ejecutarlo como administrador" para que funcione.
  2. Agregue ;%AppData%\npma Pathpara usarlo como una herramienta de línea de comando (si es compatible, como jshinty grunt-cli).
  3. Crear NODE_PATHy configurarlo %AppData%\npm\node_modulescon el fin de require('<pkg_name>')en secuencias de comandos sin instalarlo en el directorio del proyecto. (Pero npm linkse sugiere para este requisito si está trabajando en un sistema operativo mklinkcomo Vista y más nuevos).

Entorno de prueba:

  • Win 7 (Ent., 64 bits, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64 bits), Node.js 0.10.30, npm 1.4.21
Kong Kao
fuente
9

Tuve un tiempo terrible haciendo funcionar los módulos globales. Finalmente, agregué explícitamente C:\Users\yourusername\AppData\Roaming\npma la variable PATH en Variables del sistema. También necesitaba que esta variable apareciera antes que la variable de ruta nodejs en la lista.

Estoy ejecutando Windows 10.

John Galt
fuente
Esto es lo único que funcionó para mí. corriendo en windows 8
charlie carver
1
Esto es lo único que funcionó para mí también, ¡gracias!
devqon
6

Me encontré con este problema en Windows 7, ejecutando

npm install -g gulp

como administrador mientras está conectado como usuario normal.

Solución: Al ejecutar la misma instalación que el usuario normal (no "ejecutar como administrador" para cmd) todo estaba bien. Supongo que está relacionado con la ruta de instalación y búsqueda predeterminada.

SCBuergel.eth
fuente
1
Para aclarar este punto un poco más ... Cuando Node se instala como administrador, actualiza la ruta del sistema para incluir una referencia a la carpeta del módulo de nodo global del administrador. Cuando un nuevo usuario instala algo globalmente, se instala en una carpeta de módulo de nodo diferente. Cada usuario que no sea el usuario que instaló Node deberá actualizar su ruta para incluir su carpeta de módulo de nodo global. Si instala y usa el nodo en la misma cuenta, esto no será necesario.
dpsthree
Windows 8.1 pro con nodejs v6.9.4, para establecer la ruta de ejecución: C: \ Archivos de programa \ nodejs \ nodevars.bat
Robot70
4

Desde mi experiencia con win8.1 npm instala módulos C:\Users\[UserName]\AppData\Roaming\npm\node_modules pero los busca volcadamente C:\Users\[UserName]\node_modules.

Un módulo de referencia de solución simple en la aplicación por ruta completa:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");
Saulo
fuente
4

Para Windows, todo el mundo dijo que debería establecer variables de entorno para los módulos nodejs y npm, pero ¿sabe por qué? Para algunos módulos, tienen una herramienta de línea de comandos, después de instalar el módulo, hay un archivo [module] .cmd en C: \ Archivos de programa \ nodejs , y se usa para iniciar en el comando de ventana. Entonces, si no agrega la ruta que contiene el archivo cmd a las variables de entorno % PATH% , no las iniciará con éxito a través de la ventana de comandos.

Kiki.J.Hu
fuente
2

Tuve el mismo problema al intentar instalar Bower con npm install -g bower

Creo que esto se debió a que otro usuario , no yo, instaló el nodo .

Desinstalé el nodo y luego lo reinstalé. Durante la instalación, vi este texto para la opción Agregar a RUTA> módulos npm :

Mensaje en la instalación del nodo

ingrese la descripción de la imagen aquí

Después de la instalación del nodo, ejecuté npm install -g bowernuevamente. Y ahora la glorieta funciona.

Claro que no es necesario reinstalar el nodo con un usuario propio, como yo. La solución debe ser a través de las variables NODE_PATH o PATH , como han explicado otros usuarios.

Esto es solo para observar que este problema ocurre solo si el nodo ha sido instalado por otro usuario (o si durante la instalación la opción Agregar a RUTA> módulos npm no ha sido marcada).

Gregorio
fuente
2

Para mí trabajé en Windows 10 npm config set prefix %AppData%\npm\node_modules

Bojan Mitic
fuente
1

Alternativamente, puede agregar al prefijo~/.npmrc derecho . Tengo para 64 Win7.C:\Program Files\nodejs

dmi3y
fuente
1

Me topé con esta pregunta porque quiero usar node.js con Visual Studio 2015 en mi nueva computadora con Windows 10. Utilicé node.js en Windows 7 y 8 y 8.1 Nunca un problema node.js encuentra un módulo. Utilizo un node.js 0.10.39 heredado porque tengo que usar esta versión debido al módulo serial y RFXCOM.

La respuesta para Windows 10 es establecer NODE_PATH en las variables de entorno con C: \ Users \ User \ node_modules.

mojado
fuente
1
Er, no (Windows 10 aquí ...) Veo algunos módulos en C:\Users\User\node_modules Veo algunos módulos en C:\Users\User\AppData\Roaming\npm\node_modules Veo algunos módulos en C:\Users\User\node_modules También se encuentra en C:\Program Files (x86)\nodejs\node_modules\npm\node_modules No estoy seguro de cómo sucede esto. ¿Cuál es cuál y por qué lo hicieron así?
zipzit
1

Para Windows 10, tuve que instalar localmente gulp en la carpeta:

C: \ Users \ myaccount \ AppData \ Roaming \ npm \ node_modules

npm install gulp

Esto solucionó mi problema de "no se reconoce el trago"

Sitios web de Bizz
fuente
0

Simplemente descargue y vuelva a instalar el nodo desde este y esto solucionará todos los problemas de ruta.

No olvide reiniciar su símbolo del sistema o terminal.

Mahendra
fuente
0

Todas las respuestas anteriores no funcionaron para mí. Lo único que finalmente funcionó fue agregar el% AppData% \ npm a la variable Path del entorno, Y eliminar los dos archivos ng en C: \ Archivos de programa \ nodejs.

Los paquetes ng no se instalaron en C: \ Archivos de programa \ nodejs \ node_modules, por lo que era evidente que usar el binario ng del directorio nodejs no funcionaría.

No estoy seguro de por qué buscó en este directorio, porque ya configuré - variable de entorno PATH - .npmrc en C: \ Users \ MyUser - Intenté agregar variables del sistema y / o NODE_PATH

devqon
fuente
-4

Si está utilizando Windows, toma algunos pasos, 1) crear un archivo llamado package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

donde hola es el nombre del paquete y * significa la última versión de su dependencia

2) codifique el directorio de su proyecto y ejecute el siguiente comando

npm install

Instala las dependencias.

Subbu
fuente
44
Esto no lo instala globalmente (lo que hace la pregunta). Esto lleva la dependencia a la aplicación
bryanmac
He intentado todo lo mencionado anteriormente para intentar convencer a mi instalación de node.js de que reconozca los módulos instalados globalmente, y NINGUNO de ellos funciona. Incluso después de desinstalar y reinstalar el nodo (v8.11.3 LTS), cada vez que intento emitir el comando require ("mongodb") en un script node.js, aparece el MISMO error: "No se puede encontrar el módulo mongodb". Sin embargo, si publico el comando "npm ll -g mongodb", NPM me dice que el módulo está instalado. ¿Puede alguien, POR FAVOR, darme alguna enfermedad que funcione con este problema?
David Edwards
ACTUALIZACIÓN: Saulius anterior ha proporcionado una solución alternativa que realmente funciona, es decir, especificar la ruta completa al módulo en la declaración de requerimiento de JavaScript. Pero si su observación declarada sobre la búsqueda de node.js en las carpetas incorrectas para los módulos instalados es correcta, ¿alguien puede alertar a los desarrolladores de node.js sobre esto? Porque el problema TODAVÍA afecta a v8.11.3 LTS.
David Edwards