node.js - mac - ¿Cómo importo módulos globales en el nodo? Aparece "Error: ¿No se puede encontrar el módulo<módulo>"?
npm tutorial (8)
Encontré esto cuando trato de resolver el problema en Windows. De todos modos, la solución para Windows está siguiendo. Con suerte, ayudará a otros usuarios como yo ...
para windows (> = WIN7)
establecer env var: NODE_PATH
valor es:
% AppData% / npm / node_modules
esto funcionará
Por cierto: por qué estas herramientas node.js no funcionan por defecto.
Usuario instalado globalmente, y lo encuentra inútil sin alguna configuración / configuración adicional, ¡realmente estúpido!
Estoy intentando configurar Node en Mac OSX Lion. Todo parece funcionar bien, pero parece que no puedo importar ningún módulo de mi carpeta de módulos globales. 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 efectivamente instalados en / usr / local / lib / node_modules. Cuando intento ejecutar un script, sin embargo, estoy obteniendo 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.
Estoy usando Docker. Intento crear una imagen de acoplador que tenga todas mis dependencias de nodo instaladas, pero puedo usar mi directorio de aplicaciones local en el tiempo de ejecución del contenedor (sin contaminarlo con un directorio o enlace node_modules). Esto causa problemas en este escenario. Mi solución consiste en exigir desde la ruta exacta donde el módulo, por ejemplo, requiere (''/ usr / local / lib / node_modules / socket.io'')
Instale cualquier paquete globalmente de la siguiente manera:
$ npm install -g replace // replace is one of the node module.
Como este módulo de reemplazo está instalado 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 puede usar solo los módulos locales que están presentes en la carpeta del módulo de su nodo.
Ahora para usar el módulo global, debe vincularlo con la ruta del módulo de nodo utilizando el siguiente comando.
$ npm link replace
Ahora regrese y vea la carpeta del módulo de nodo que ahora podría ver reemplazar el módulo 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 se necesita más aclaración.
Node.js utiliza la variable ambiental NODE_PATH
para permitir la especificación de directorios adicionales para incluir en la ruta de búsqueda del módulo. Puede usar npm
para decirle dónde se almacenan los módulos globales con el npm root -g
. Para 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)
Puede usar el enlace npm para crear un enlace simbólico a su paquete global en su carpeta de proyectos.
Ejemplo:
$ npm install -g express
$ cd [local path]/project
$ npm link express
Todo lo que hace es crear una carpeta node_modules local y luego crear un symlink express -> [directorio global] / node_modules / express que luego puede ser resuelto por require(''express'')
Puede usar require con la ruta al directorio del módulo global como argumento.
require(''/path/to/global/node_modules/the_module'');
En mi Mac, uso esto:
require(''/usr/local/lib/node_modules/the_module'');
¿Cómo encontrar dónde están sus módulos globales? -> ¿Dónde instala npm los paquetes?
Si está usando npm> = 1.0, puede usar 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.
npm link es una herramienta de desarrollo. Es increíble para administrar paquetes en su caja de desarrollo local. Pero la implementación con el enlace npm básicamente requiere problemas, ya que hace que sea muy fácil actualizar las cosas sin darnos cuenta.
Como alternativa, puede instalar los paquetes localmente y globalmente.
Para información adicional, ver
require.paths
está en desuso.
Ve a la carpeta de tu proyecto y escribe
npm install socket.io
eso debería instalarlo en la carpeta local ./node_modules donde lo buscará el nodo.
Guardo mis cosas así:
cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io
Crea un archivo app.js
// app.js
var socket = require(''socket.io'')
ahora ejecuta mi aplicación
node app.js
Asegúrese de estar usando npm >= 1.0
y node >= 4.0
.