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)
尝试将其安装在项目中而不是全局包目录中。
如果您使用 apackage.json
来管理依赖项,那么您只需npm bundle
在项目目录中运行,然后添加require.paths.unshift('./node_modules')
到应用程序文件的顶部。在我看来,这是所有项目的最佳实践(特别是考虑到节点开发的速度)。
归档时间: |
|
查看次数: |
25176 次 |
最近记录: |