我在我的机器上做了一个应用程序,它运行良好。 我上传到服务器,并崩溃与以下错误:
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)
这是我的应用程序如何开始:
var express=require('express'); var http=require('http'); var xml2js = require('xml2js'); var sys = require('sys'); var util = require('util');
我已经使用npm安装了express和xml2js。 我的机器和服务器上的节点具有完全相同的版本(v0.4.0)。
我已经确定xml2js和express驻留的path(/ usr / local / lib / node /)包含在节点查找模块的path中。 (我编辑了文件'module.js'来打印正在查找模块的path。)
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)
那么,什么是错的? 我有正确的道路,模块在那里。 为什么不能find节点? 完全相同的代码在我的本地机器上顺利运行。 如果有问题,我的机器是Mac,服务器运行CentOS。
require.paths.push('/usr/local/lib/node_modules');
不再适用于节点v0.8.1及以上版本。 您可以设置环境变量NODE_PATH ,而不是使用require.paths.push
export NODE_PATH=/usr/local/lib/node_modules
或者如果你安装npm模块到你的主目录,那么
export NODE_PATH=~/.npm
Spmason提到,Node改变了模块的解决方式。 我遇到了同样的问题,并通过全局安装所有模块( --global )并在需要任何模块之前将/usr/local/lib/node_modules到/usr/local/lib/node_modules来解决此问题:
require.paths.push('/usr/local/lib/node_modules'); require('blah'); // it works!
节点0.4改变了模块 的解析方式 , 看起来这样会破坏xml2js 。
节点0.4在模块中查找./node_modules 。 对我来说,只是用ln -s /usr/local/lib/node node_modules链接模块目录到我的项目目录
就我个人而言,我发现XML2JS模块需要通过npm本地安装。 虽然我只在Windows上尝试过,但我在这里写了一篇博文
尝试安装它在项目而不是全局包目录。
如果您使用package.json来管理依赖关系,那么您可以在项目目录中运行npm bundle ,然后在应用程序文件的顶部添加require.paths.unshift('./node_modules') 。 在我看来,这是所有项目的最佳实践(特别是考虑节点发展的速度)。
我想简单的答案是当前包xml2js和xml2js-xpat被捣毁。
我结束了使用node-xml。 我希望xml2js不是我试图安装的第一个npm模块。
只是让ln -s /usr/local/lib/node /usr/local/lib/node_modules ,但是在将node_modules的内容移动到原始节点库node ,它帮助了我:)