2016-06-14 12 views
3

を見つけることができません、私は次のようなエラーが発生します。が電子ではモジュールの../dialog '(電子致命的なエラー)

module.js:440 
    throw err; 
    ^

Error: Cannot find module '../dialog' 
    at Module._resolveFilename (module.js:438:15) 
    at Function.Module._resolveFilename (/opt/App/resources/electron.asar/common/reset-search-paths.js:47:12) 
    at Function.Module._load (module.js:386:25) 
    at Module.require (module.js:466:17) 
    at require (internal/module.js:20:19) 
    at Object.get [as dialog] (/opt/App/resources/electron.asar/browser/api/exports/electron.js:35:14) 
    at process.<anonymous> (/opt/App/resources/electron.asar/browser/init.js:64:31) 
    at emitOne (events.js:96:13) 
    at process.emit (events.js:188:7) 
    at process._fatalException (node.js:276:26) 

これは、Linuxで失敗した子プロセスの産卵で発生します。奇妙な私はその周りのtry catchブロックを持っている、まだelectron.asarからブラウザ/ init.jsのコードに見られるように、それはまだ、uncaughtexceptionにつながるので:

// Don't quit on fatal error. 
process.on('uncaughtException', function (error) { 
    // Do nothing if the user has a custom uncaught exception handler. 
    var dialog, message, ref, stack 
    if (process.listeners('uncaughtException').length > 1) { 
    return 
    } 


// Show error in GUI. 
    dialog = require('electron').dialog 
    stack = (ref = error.stack) != null ? ref : error.name + ': ' + error.message 
    message = 'Uncaught Exception:\n' + stack 
    dialog.showErrorBox('A JavaScript error occurred in the main process', message) 
} 

としては、私のコードが入っている、と述べましたtry catch:

try { 
    server = childProcess.spawn(java, ["-jar", "App.jar"], { 
    "cwd": serverDirectory, 
    "detached": true 
    }, function(err) { 
    console.log("in callback"); 
    }); 
} catch (err) { 
    console.log("here we are"); 
    console.log(err); 
} 

しかし、コールバックとキャッチブロックには到達しません。ここで何が起こっているのか、デフォルトのダイアログモジュールが見つからないのはなぜですか?

答えて

0

「デフォルトのダイアログモジュール」により、あなたは、あなたがそうのようなものを必要とすることができ、電子ダイアログAPIを意味している場合、私は

...私が正しくあなたの質問を理解してほしい:const { dialog } = require('electron')を。 (あるいは、1.0より前のバージョンでは、単にrequire('dialog')を参照してください。https://github.com/electron/electron/blob/master/docs/api/dialog.md

また、try/catchは、子プロセスのrequireを回避する必要があります。それはそれを生み出した親プロセスに巻き込まれていないので、必要は、全く異なるNode.jsのプロセスに失敗していること、それはのように見えた場合、あなたの子プロセスコードは良い仕事かもしれないようですね:。

try { 
    const dialog = require('dialog'); 
} catch(e) {} 

また、場合childProcess.spawnは、コアノードモジュールchild_processを参照しており、コールバック機能を受け入れません。https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

0を参照してください。

子プロセスのコードを共有できますか?それはもっと助けるかもしれない。

+0

こんにちは、私は自分自身でダイアログを要求していません。これはbrowser/init.jsのelectron.asarで起こります。これは捕らえられない例外のためです。電子はダイアログボックスを表示しようとしますが、ダイアログモジュールを必要とせず、したがってエラーです。私のコールバックはそれが前にexecステートメントであったためでした、はい、私はそれを取り除くことができます。私は試しに他の場所でキャッチすることによってあなたが何を意味するのか分からないのですか? childProcess変数のrequireはページの一番上にあります。 const childProcess = require( "child_process"); – Wesley

+0

子プロセス自体はJava実行可能ファイルです。しかし、私はserver.stderr.on( "data"、function(){})コールバックも持っています。全体がtry catchブロックにあります。 – Wesley

0

electron 1.6.2

がアプリケーションを閉じるとエラーが発生し、電子は、ダイアログに表示したい場合、多分クローズ処理が開始された電子は、このモジュールをロードすることはできません、それが原因だった考え出しと私は同じエラーを見つけました、とにかく私が追加:main.js

const { dialog } = require('electron'); 

を代わりにダイアログエラーコンソールでは、これ以上のエラー、私はそれを修正することができ、その後私はインクルードは念のために必要としましょう。

関連する問題