xmlbuilder xml2json xml2js read parser nodejs node fast example linux node.js include

linux - read - xml2json example node js



node.js no puede encontrar el módulo xml2js (8)

Hice una aplicación en mi máquina, y funciona bien. Lo subí al servidor y se está estrellando con el siguiente error:

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 Express como 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 donde se encuentran xml2js y Express residen (/ usr / local / lib / node /) se incluya en las rutas donde el nodo busca los módulos. (Edité el archivo ''module.js'' para imprimir las rutas donde 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á ahí. ¿Por qué el nodo no puede encontrarlo? Y el mismo código se ejecuta sin problemas en mi máquina local. Si importa, mi máquina es una Mac y el servidor ejecuta CentOS.


Como mencionó Spmason, Node cambió la forma en que se resuelven los módulos. He tenido el mismo problema que usted y lo resolví instalando todos los módulos globalmente ( --global ) y agregando /usr/local/lib/node_modules al requisito antes de requerir cualquier módulo:

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


El nodo 0.4 busca módulos / módulos en ./node_modules . Para mí fue útil simplemente vincular el directorio de módulos a mi directorio de proyecto con ln -s /usr/local/lib/node node_modules



Intente instalarlo en el proyecto en lugar del directorio global de paquetes.

Si está utilizando package.json para administrar dependencias, simplemente puede ejecutar el npm bundle en el directorio del proyecto y luego agregar 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 lleva a cabo el desarrollo del nodo).


Personalmente, descubrí que el módulo XML2JS debe instalarse a través de npm localmente. Aunque solo he probado esto en Windows, he escrito una entrada de blog here


Supongo que la respuesta simple es que los paquetes actuales para xml2js y xml2js-xpat están bloqueados.

Terminé usando node-xml en su lugar. Desearía que xml2js no hubiera sido mi primer módulo npm que intenté instalar.


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


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

Ya no es válido para el nodo v0.8.1 y superior. En lugar de utilizar require.paths.push , puede establecer la variable de entorno NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules

o si instala módulos npm en su directorio de inicio, entonces

export NODE_PATH=~/.npm