Estoy tratando de configurar Node en Mac OSX Lion. Todo parece funcionar bien, pero parece que no puedo importar nada de los módulos de mi carpeta global de módulos. Me sale el error
Error: Cannot find module <module>
Si ejecuto esto: node -e require.paths
la respuesta que obtengo es:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
Lo cual es correcto, mis módulos están instalados en / usr / local / lib / node_modules. Sin embargo, cuando intento ejecutar un script, obtengo esto:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
Mi .bash_profile se ve así:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Realmente agradecería algo de ayuda, no tengo idea de por qué no puedo importar ninguna biblioteca.
npm link
) aquí: stackoverflow.com/a/15646750/2671392Respuestas:
Si está usando npm> = 1.0, puede usarlo
npm link <global-package>
para crear un enlace local a un paquete ya instalado globalmente. ( Advertencia: el sistema operativo debe admitir enlaces simbólicos ) .Sin embargo, esto no viene sin sus problemas.
Como alternativa, puede instalar los paquetes tanto local como globalmente.
Para obtener información adicional, vea
fuente
npm
el caché (que vive en~/.npm
) hará que sea conveniente el proceso de reinstalación realizado en sus diferentes ubicaciones.Node.js utiliza la variable de entorno
NODE_PATH
para permitir especificar directorios adicionales para incluir en la ruta de búsqueda del módulo. Puede usarlonpm
para decirle dónde se almacenan los módulos globales con elnpm root -g
comando. Entonces, al unir esos dos, puede asegurarse de que los módulos globales estén incluidos en su ruta de búsqueda con el siguiente comando (en Linux-ish)export NODE_PATH=$(npm root --quiet -g)
fuente
NODE_PATH
sugerencia variable de entorno. Eso ayudó mucho!NODE_PATH
la ruta posix equivalente para hacer que npm funcione en MSYS2. Gracias..node_modules
pueda buscar en su carpeta, pero para importar módulos utilizandorequire()
, aún deben instalarse en su directorio de proyecto local (o, alternativamente, vincularse mediantenpm link
). Los módulos globales no se pueden importar en proyectos, solo se pueden ejecutar binarios / scripts desde allí.Puede usar el enlace npm para crear un enlace simbólico a su paquete global en su carpeta de proyectos.
Ejemplo:
Todo lo que hace es crear una carpeta local node_modules y luego crear un enlace simbólico express -> [directorio global] / node_modules / express que luego puede ser resuelto por
require('express')
fuente
Instale cualquier paquete globalmente de la siguiente manera:
Como este módulo de reemplazo se instala globalmente, si ve la carpeta de módulos de nodo, no verá el módulo de reemplazo allí y, por lo tanto, no puede usar este paquete usando require ('replace').
porque con require solo puede usar módulos locales que están presentes en su carpeta de módulo de nodo.
Ahora, para usar el módulo global, debe vincularlo con la ruta del módulo de nodo utilizando el siguiente comando.
Ahora regrese y vea la carpeta de su módulo de nodo, ahora podrá ver el módulo de reemplazo allí y puede usarlo con require ('replace') en su aplicación, ya que está vinculado con su módulo de nodo local.
Por favor, avíseme si necesita más aclaraciones.
fuente
Puede usar require con la ruta al directorio del módulo global como argumento.
En mi Mac, uso esto:
¿Cómo encontrar dónde están sus módulos globales? -> ¿Dónde instala npm paquetes?
fuente
Establecer la variable de entorno NODE_PATH para que apunte a su
node_modules
carpeta global .En Windows 7 o superior, la ruta es similar,
%AppData%\npm\node_modules
mientras que en UNIX podría ser similar,/home/sg/.npm_global/lib/node_modules/
pero depende de la configuración del usuario.El comando
npm config get prefix
podría ayudar a descubrir cuál es la ruta correcta.En sistemas UNIX puede lograrlo con el siguiente comando:
fuente
Estoy usando Docker Estoy tratando de crear una imagen acoplable que tenga todas mis dependencias de nodo instaladas, pero puedo usar mi directorio de aplicaciones local en tiempo de ejecución del contenedor (sin contaminarlo con un directorio o enlace node_modules). Esto causa problemas en este escenario. Mi solución alternativa es requerir desde la ruta exacta donde se encuentra el módulo, por ejemplo, require ('/ usr / local / lib / node_modules / socket.io')
fuente
require.paths
es obsoleto.Ve a la carpeta de tu proyecto y escribe
eso debería instalarlo en la carpeta local ./node_modules donde el nodo lo buscará.
Mantengo mis cosas así:
Crear un archivo app.js
ahora ejecuta mi aplicación
Asegúrate de estar usando
npm >= 1.0
ynode >= 4.0
.fuente