14

似乎在任何地方都找不到关于此的任何文章。我基本上想从程序中捕获“找不到模块”错误,并可选择要求安装它,但即使在我的 require 语句周围使用 try/catch,我似乎也无法捕获任何错误。这甚至可能吗?我没有看到它在任何地方完成。

例如:

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 文件中执行此操作会更容易

4

2 回答 2

21

To make it right, make sure to catch only Module not found error for given module:

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;
    }

}
于 2013-07-10T09:00:11.443 回答
13

正如你所拥有的那样,这对我来说很好。您确定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
}
于 2013-07-09T16:35:04.187 回答