node.js找不到模块xml2js

时间:2011-02-18 23:10:36

标签: linux node.js include

我在我的机器上制作了一个应用程序,它运行良好。我将它上传到服务器,它崩溃了,出现以下错误:

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驻留路径(/ usr / local / lib / node /)包含在节点查找模块的路径中。 (我编辑了'module.js'文件来打印它寻找模块的路径。)

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)

那有什么不对?我有正确的道路,模块就在那里。为什么节点找不到呢?完全相同的代码在我的本地机器上顺利运行。如果重要,我的机器是Mac,服务器运行CentOS。

9 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:11)

正如spmason所提到的,Node改变了模块的解析方式。我遇到了与您相同的问题并通过全局安装所有模块(--global)并在需要任何模块之前将/usr/local/lib/node_modules添加到require来解决此问题:

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

答案 2 :(得分:6)

节点0.4改变了modules are resolved及其appears that this breaks xml2js的方式。

答案 3 :(得分:3)

节点0.4在./node_modules中查找模块。 对我来说,只需将模块目录链接到我的项目目录ln -s /usr/local/lib/node node_modules

即可

答案 4 :(得分:1)

就个人而言,我发现需要在本地通过npm安装XML2JS模块。虽然我只是在Windows上试过这个,但我写了一篇博文here

答案 5 :(得分:0)

尝试在项目中安装它而不是全局包目录。

如果您使用package.json来管理相关性,那么您只需在项目目录中运行npm bundle,然后在应用文件的顶部添加require.paths.unshift('./node_modules')即可。在我看来,这是所有项目的最佳实践(特别是考虑到节点开发的速度)。

答案 6 :(得分:0)

我想简单的答案是xml2js和xml2js-xpat的当前包被破坏了。

我最终使用了node-xml。我希望xml2js不是我试图安装的第一个npm模块。

答案 7 :(得分:0)

只需制作ln -s /usr/local/lib/node /usr/local/lib/node_modules,但在将node_modules的内容移至原始节点库node之前 - 它帮助了我:)

答案 8 :(得分:0)

尝试安装带有-g标志的npm软件包以使其具有全局性

npm install -g package_name