2013-07-09 50 views
9

似乎無法在此處找到任何文章。我基本上想要捕捉程序內部的「無法找到模塊」錯誤,並且可以選擇安裝它,但即使圍繞我的require語句嘗試/捕獲,我也無法捕獲任何錯誤。這甚至有可能嗎?我沒有看到它在任何地方完成。在node.js中捕獲需要模塊的錯誤

例如:

try { 
    var express = require('express'); 
} catch (err){ 
    console.log("Express is not installed."); 
    //proceed to ask if they would like to install, or quit. 
    //command to run npm install 
} 

我想這可能是與一個單獨的.js啓動文件來完成,沒有任何第三方的要求,而只使用fs檢查node_modules,然後有選擇地從子進程的運行npm install ,然後與另一個孩子運行node app。但感覺就像在單個app.js文件中這樣做會更容易。

+1

'require'本身表明這模塊對於應用程序運行至關重要。如果你問我,「找不到模塊」是一個不言自明的錯誤信息。作爲一名開發人員,如果您希望他人使用您的應用程序,則您有責任將所有依賴關係包含在您的軟件包中。 – Amberlamps

+1

@Amberlamps通常最好不要將依賴項作爲包的一部分提供給應用程序,而是在使用時下載它們。以免提供陳舊/過時的模塊,而不是浪費空間。這就是'package.json'和'npm install'的用途。我尋找這個解決方案是爲了使我的應用程序儘可能地用戶友好和自動化。 – krb686

回答

6

對於我來說這很適合您,因爲您擁有它。你確定文件系統中有沒有node_modules/express文件夾在你的上面?試着這樣做是爲了清楚發生了什麼事:

try { 
    var express = require('express'); 
    console.log("Express required with no problems", express); 
} catch (err){ 
    console.log("Express is not installed."); 
    //proceed to ask if they would like to install, or quit. 
    //command to run npm install 
} 
+0

我不知道我是怎麼搞砸了,但我刪除了node_modules文件夾,它現在似乎工作得很好。謝謝。我會接受你的回答,提醒我重試並修復它。 – krb686

16

作出正確選擇,請一定要抓住唯一模塊找不到錯誤給定模塊:

try { 
    var express = require('express'); 
} catch (e) { 
    if (e.code !== 'MODULE_NOT_FOUND') { 
     // Re-throw not "Module not found" errors 
     throw e; 
    } 
    if (e.message.indexOf('\'express\'') === -1) { 
     // Re-throw not found errors for other modules 
     throw e; 
    } 

} 
相關問題