2011-02-18 23 views
19

Hice una aplicación en mi máquina, y funciona bien. He subido al servidor, y se bloquea con el siguiente error:node.js no puede encontrar el módulo xml2js

node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Cannot find module 'xml2js' 
    at Function._resolveFilename (module.js:289:11) 
    at Function._load (module.js:241:25) 
    at require (module.js:317:19) 
    at Object.<anonymous> (/var/www/node/price/index.js:3:14) 
    at Module._compile (module.js:373:26) 
    at Object..js (module.js:379:10) 
    at Module.load (module.js:305:31) 
    at Function._load (module.js:271:10) 
    at Array.<anonymous> (module.js:392:10) 
    at EventEmitter._tickCallback (node.js:108:26) 

Así es como comienza mi aplicación:

var express=require('express'); 
var http=require('http'); 
var xml2js = require('xml2js'); 
var sys = require('sys'); 
var util = require('util'); 

He instalado tanto expresa y xml2js usando NPM. Tengo exactamente la misma versión (v0.4.0) para el nodo en mi máquina y mi servidor.

Me he asegurado de que la ruta wher xml2js y express residen (/ usr/local/lib/node /) se incluye en las rutas donde nodo busca módulos. (He editado el archivo 'module.js' para imprimir las trayectorias en las que está buscando módulos.)

node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Cannot find module 'xml2js', in paths: /root/.node_modules,/root/.node_libraries,/usr/local/lib/node,/var/www/node/price/node_modules,/var/www/node/node_modules,/var/www/node_modules,/var/node_modules,/node_modules 
    at Function._resolveFilename (module.js:289:11) 
    at Function._load (module.js:241:25) 
    at require (module.js:317:19) 
    at Object.<anonymous> (/var/www/node/price/index.js:3:14) 
    at Module._compile (module.js:373:26) 
    at Object..js (module.js:379:10) 
    at Module.load (module.js:305:31) 
    at Function._load (module.js:271:10) 
    at Array.<anonymous> (module.js:392:10) 
    at EventEmitter._tickCallback (node.js:108:26) 

Entonces, ¿qué está mal? Tengo el camino correcto, el módulo está allí. ¿Por qué el nodo no puede encontrarlo? Y el mismo código exacto funciona sin problemas en mi máquina local. Si es importante, mi máquina es una Mac y el servidor ejecuta CentOS.

+1

posiblemente relacionados: http://groups.google.com/group/nodejs/browse_thread/thread/61d6cf86f1593e10 –

Respuesta

0

Intente instalarlo en el proyecto en lugar del directorio global del paquete.

Si estás utilizando un package.json para gestionar dependencias a continuación, puedes ejecutar npm bundle en el directorio del proyecto y luego añadir require.paths.unshift('./node_modules') en la parte superior de su archivo de aplicación. En mi opinión, esta es la mejor práctica para todos los proyectos (especialmente teniendo en cuenta la velocidad con la que se desarrolla el nodo).

3

El nodo 0.4 se ve en ./node_modules para los módulos. Para mí sí ayudó a ponga el enlace del directorio de módulos a mi directorio del proyecto con ln -s /usr/local/lib/node node_modules

+0

(oa la inversa) que –

0

supongo que la respuesta es sencilla los paquetes actuales para xml2js y xml2js-xpat se rompieron.

Terminé usando node-xml en su lugar. Ojalá xml2js no hubiera sido mi primer módulo npm que traté de instalar.

11

Como mencionó Spmason, el nodo cambió la forma de resolver los módulos. He tenido el mismo problema que usted y resuelto mediante la instalación de todos los módulos a nivel mundial (--global) y añadiendo /usr/local/lib/node_modules al requerir antes de requerir cualquier módulo:

require.paths.push('/usr/local/lib/node_modules'); 
require('blah'); // it works! 
+0

me lo resolvió, gracias. –

+0

Esto funcionó para mí: 'require.paths.push ('/ usr/lib/node');' – ghbarratt

+0

En el entorno de Windows, npm instaló módulos en la carpeta c:/documents y settings del usuario que inició sesión ... y para mí , Tuve que crear una nueva carpeta 'node_modules' en la raíz de mi app.js y copiar las carpetas xml2js u otras en la nueva carpeta node_modules –

0

simplemente hacer ln -s /usr/local/lib/node /usr/local/lib/node_modules, pero antes de mover el contenido de node_modules en la biblioteca original nodo node - me ayudó :)

17
require.paths.push('/usr/local/lib/node_modules'); 

ya no es válida para el nodo de v0.8.1 y superiores. En lugar de usar require.paths.empujar, puede establecer la variable de entorno NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules 

o si instala módulos de la NGP en su directorio personal, entonces

export NODE_PATH=~/.npm 
1

Personalmente, me pareció que el módulo XML2JS necesita ser instalado vía npm localmente. Aunque sólo he probado esto en Windows, he escrito una entrada de blog here

Cuestiones relacionadas