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スタートアップファイルで実行できると思います.jsfsをチェックするため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ファイルシステムのどこかにrequireが見つけているフォルダーがありませんか?何が起こっているのかを明確にするためにこれを試してください:

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 に答える