2013-07-09 17 views
9

どこでもこの記事を見つけることはできません。私は基本的にプログラム内から "モジュールを見つけることができません"というエラーをキャッチし、オプションでそれをインストールするように頼んでいますが、require文の周りにtry/catchを付けてもエラーをキャッチできないようです。これも可能ですか?私はそれがどこで行われても見ていない。例えばnode.jsでモジュールを要求する際にエラーをキャッチ

:私は、これは任意のサードパーティせずに別々の.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 
} 

が必要であり、単にnode_modulesをチェックするためにfsを使用して、必要に応じて子プロセスから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; 
    } 

}