node.js找不到模块xml2js

tar*_*ill 19 linux include node.js

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

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)
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序开始的方式:

var express=require('express');
var http=require('http');
var xml2js = require('xml2js');
var sys = require('sys');
var util = require('util');
Run Code Online (Sandbox Code Playgroud)

我使用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)
Run Code Online (Sandbox Code Playgroud)

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

Han*_*xue 17

require.paths.push('/usr/local/lib/node_modules');
Run Code Online (Sandbox Code Playgroud)

对于节点v0.8.1及更高版本不再有效.而不是使用的require.paths.push,你可以设置环境变量NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

或者,如果您在主目录中安装npm模块,那么

export NODE_PATH=~/.npm
Run Code Online (Sandbox Code Playgroud)


gon*_*lva 11

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

require.paths.push('/usr/local/lib/node_modules');
require('blah'); // it works!
Run Code Online (Sandbox Code Playgroud)


Dav*_*veJ 0

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

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