2015-02-07 80 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