2015-02-07 89 views
12

我正在使用ubuntu,我试图使用nodejs来运行脚本,并且出现此错误。module.js:338在node.js中抛出错误

/home/bebz/Documents/test# node server.js 
module.js:338 
throw err; 
    ^
Error: Cannot find module 'merge-descriptors' 
    at Function.Module._resolveFilename (module.js:336:15) 
    at Function.Module._load (module.js:278:25) 
    at Module.require (module.js:365:17) 
    at require (module.js:384:17) 
    at Object.<anonymous> (/home/bebz/node_modules/express/lib/express.js:6:13) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Module.require (module.js:365:17) 

什么问题?我在正确的目录中,也试图用root运行它,但没有任何反应。

里面server.js是

// get dependencies 
var app = require("express")(); 

// handle request and response 
app.get("/", function(req, res) { 
    res.send({name:"Hello Wolrd"}); 
}); 

// initializing a port 
app.listen(5000); 

一个简单的例子只是为了显示Node.js的工作。

回答

26

看起来好像脚本有一个未满足的依赖关系 - 意味着你必须首先安装模块“merge-descriptors”。

它似乎也是脚本使用“express”(和“合并描述符”实际上看起来像“express”的依赖项) - 因为这没有引发错误,所以似乎已经安装了一些依赖项。

所以你可以尝试通过npm installnpm update安装缺少的。

更新:根据npmjs.org“合并描述符”是“express”的依赖关系。看看你的堆栈跟踪显示你已经在全球安装了“快车” - 所以你应该试试npm update -g

如果这样不能解决你的问题,你应该看看this question

+2

我使用了'npm update',它现在正在工作。非常感谢! – Abdullah 2015-02-07 02:00:41

+0

当目标脚本不存在时,节点也会抛出338。基本上没有找到文件的通知。 – UberDoyle 2015-03-04 14:49:55

+0

@UberDoyle:其实未得到满足的依赖是,从技术角度来看,一个简单的“目标脚本不存在” – 2015-03-05 17:10:40

0

当模块名称和文件名称不匹配时会发生此错误。在为模块和文件名使用相同名称后解决。例如

2

NPM更新

我看到这个当模块安装顺序是不完美的,或多个模块存在。

npm update会对此进行排序,不推荐使用不正确的版本。

1

无论何时您得到module.js:338 throw err;请尝试检查npm是否安装在您的机器中。

UserName$ npm -v 

如果你得到的版本名称,那么它清楚地表明npm安装。
如果您没有获取版本名称,则说明您的安装有问题,或者未安装。

要安装npm,在你的终端上键入此命令,

UserName$ curl -0 -L http://npmjs.org/install.sh | sudo sh

还要注意我根据您的用户权限添加须藤sudo sh命令。

0

你应该安装merge-descriptors模块。打开您的终端或命令提示符并运行以下命令:

npm install --save merge-descriptors