Electronのアプリが落ちたり、画面がまっしろになっってしまった時の、問題の追い方
Electronアプリでのエラーの追い方。
アプリが起動もしないで落ちる時
アプリをクリックして起動したら、そのまま落ちる時。
最初に追うのは main processの初期化まわりで問題が起きていないか。
electron-logを入れて、ログ出力するのが良いと思う。
electron-logを入れる (https://github.com/megahertz/electron-log)
npm install --save electron-log
main processのjavascriptコードの上の方に、エラーを拾うコードを追加する。
便利だから、このコードは入れっぱなしでリリースしても良いと思う。
var log = require('electron-log'); process.on('uncaughtException', function(err) { log.error('electron:event:uncaughtException'); log.error(err); log.error(err.stack); app.quit(); });
electron-logで出力されたエラーログを見に行く。
↓この場所に出力されます。
アンインストール方法という資料があるなら、このログファイルを消す手順も追加しておきましょう。
view $HOME/Library/Logs/YourAppName/log.log
画面がまっしろになる
アプリの画面がまっしろ。何も表示されない。
- renderer process側で、読み込めていないリソースがあるか、
- JavaScriptでエラーが起きているのではないか?
Developer Toolを開いて、エラーが起きていないか確認しましょう。
なんらかの操作をしたら、プチっとアプリが落ちる
なんらかの操作をトリガーとして、突然、アプリが落ちる。
↑で紹介した、electron-logのログに何か出てるのではないか?
例えば、このように。
このログは main process で読み込んでいるnpm moduleが見つからなかったエラー。
[2018-10-17 20:11:26:0174] [error] Error: Cannot find module 'about-window' at Module._resolveFilename (module.js:485:15) at Function.Module._resolveFilename (/Users/taku-o/Desktop/myukkurivoice/release/myukkurivoice/MYukkuriVoice-darwin-x64/MYukkuriVoice.app/Contents/Resources/electron.asar/common/reset-search-paths.js:35:12) at Function.Module._load (module.js:437:25) at Module.require (module.js:513:17) at require (internal/module.js:11:18)
自分はファンクションのパラメータ名と、
変数のスペル名を間違えていて、アプリが落ちる現象に遭遇したことがある。
エラーログが出なくて苦労した。
ダイナミックライブラリを読み込んで、
誤った操作した時も、もちろんアプリが無言で落ちた。
こちらは実装している人には原因がわかりやすい。
アプリにパッケージングしてない状態では動く。パッケージングすると動かない。
electron .
では正しく動作する。electron-packagerなどでアプリに固めると、動かなくなる現象。
どこで動かなくなっているかにもよるけれど、
- 片方にしか入っていないファイルは無いか?
- アプリケーションのapp.asarの中に、想定通りのファイルは入っているか?
# asarコマンドで、app.asarの中を覗ける npm install -g asar asar e YourAppName.app/Contents/Resources/app.asar dest
- electron-packagerのコマンドオプションでasar.unpackDirを指定していて、アプリで実行した時にはファイルパスが間違っていたりしない?
- 実行権限の必要なファイルを、app.asarの中に入れてしまっていないか
- electron-packagerのコマンドオプションignoreで、実行に必要なファイルを指定してないか
electron-packagerのignoreオプションはRegExpのmatchです。
typescriptのファイルを除こうとして、".ts"と指定したら
contents
という文字列にマッチして、アプリが動かなくなったことがある。
まとめ
アプリが落ちたり、エラーが出たりはしないけど、うまく動かない、は自力で追って欲しい。
まとめたら、個人開発だけど、いろんなトラブルを拾ったなぁ。