Electronアプリでデータやメッセージをコンソールに記録するにはどうすればよいですか?
この本当に基本的なhello worldは、デフォルトではdevツールを開きますが、console.log('hi')
を使用することはできません。 Electronに代わるものはありますか?
main.js
var app = require('app');
var BrowserWindow = require('browser-window');
require('crash-reporter').start();
var mainWindow = null;
app.on('window-all-closed', function() {
// Mac OS X - close is done explicitly with Cmd + Q, not just closing windows
if (process.platform != 'darwin') {
app.quit();
}
});
app.on('ready', function(){
mainWindow = new BrowserWindow({ width: 800, height: 600});
mainWindow.loadUrl('file://' + __dirname + '/index.html');
mainWindow.openDevTools();
mainWindow.on('closed', function(){
mainWindow = null;
});
});
console.log
は機能しますが、ログを記録する場所は、メインプロセスとレンダラープロセスのどちらから呼び出すかによって異なります。
レンダラープロセス(つまり、index.html
ファイルに含まれるJavaScript)から呼び出すと、開発ツールウィンドウに記録されます。
メインプロセス(つまり、main.js
)から呼び出すと、Nodeの場合と同じように動作します-ターミナルウィンドウにログが記録されます。 electron .
を使用してターミナルからElectronプロセスを開始している場合、そこのメインプロセスからconsole.log
呼び出しを確認できます。
Windowsで環境変数を追加することもできます。
ELECTRON_ENABLE_LOGGING=1
これにより、端末にコンソールメッセージが出力されます。
レンダラープロセス内からコンソールにログインする別の方法があります。これがElectronの場合、Nodeのネイティブモジュールにアクセスできます。これにはconsole
モジュールが含まれます。
var nodeConsole = require('console');
var myConsole = new nodeConsole.Console(process.stdout, process.stderr);
myConsole.log('Hello World!');
このコードをレンダラープロセス内から実行すると、Electronを実行したターミナルでHello World!
が取得されます。
console
モジュールの詳細なドキュメントについては、 https://nodejs.org/api/console.html を参照してください。
さらに別の可能性は、 remote.getGlobal(name)
を使用してメインプロセスコンソールにアクセスすることです。
const con = require('electron').remote.getGlobal('console')
con.log('This will be output to the main process console.')
M. Damianの答えに加えて、どのレンダラーからメインプロセスのコンソールにアクセスできるように設定する方法は次のとおりです。
メインアプリに以下を追加します。
const electron = require('electron');
const app = electron.app;
const console = require('console');
...
app.console = new console.Console(process.stdout, process.stderr);
任意のレンダラーで追加できます:
const remote = require('electron').remote;
const app = remote.app;
...
app.console.log('This will output to the main process console.');
これは、追加情報に関するcscsandy5の回答のフォローアップです。 here からの情報
process.stdout.write('your output to command Prompt console or node js ')
このコードは、electronアプリを起動したターミナルウィンドウに単純なデバッグメッセージを出力するのに最適であり、console.logの上に構築されます。
ボタンが押されるたびにターミナルにhelloを書き込むjQueryスクリプトのサンプルスニペット(tutorialspoint electonチュートリアルに基づく)があります(警告:出力文字列に独自の改行を追加する必要があります!)
let $ = require('jquery')
var clicks = 0;
$(function() {
$('#countbtn').click(function() {
//output hello <<<<<<<<<<<<<<<<<<<<<<<
process.stdout.write('hello')
$('#click-counter').text(++clicks);
});
$('#click-counter').text(clicks);
});
process.stdout.write('your output to command Prompt console or node js ')
Npmパッケージelectron-logを使用できます https://www.npmjs.com/package/electron-log
エラー、警告、情報、詳細、デバッグ、愚かな出力をネイティブOSログに記録します。
var log = require('electron-log');
log.info('Hello, log');
log.error('Damn it, an error');
すべて Alex Warrenが書いた は本当です。ここで重要なのは、Electronの起動方法です。 package.jsonファイルで標準スクリプトを使用すると、機能しません。 console.log()
を機能させるには、古いスクリプトをこの新しいスクリプトに置き換えます。
古いもの:
"scripts": {
"start": "electron ."
}
新しいもの:
"scripts": {
"start": ".\\node_modules\\electron\\dist\\electron.exe ."
}
これで、すべてのconsole.log()
呼び出しが端末にも表示されます。
これは私が使用するものです:
let mainWindow // main window reference, you should assign it below 'mainWindow = new BrowserWindow'
function log(...data) {
mainWindow.webContents.executeJavaScript("console.log('%cFROM MAIN', 'color: #800', '" + data + "');");
}
使用例(console.log
と同じ):
log('Error', { msg: 'a common log message' })
log('hello')
ソース: https://github.com/Fuse-box/Fuse-box-electron-seed/tree/master/src/main logger.jsファイルで、実際の使用方法を確認できます場合。
古いスレッドを発生させて申し訳ありませんが、これは「console.logを端末に出力する方法」(または同様の検索)の上位結果です。
端末への出力をもう少し制御したい場合は、webContents.on( 'console-message')を次のように使用できます。
mainWindow.webContents.on('console-message', (event, level, message, line, sourceId) => {
console.log(message + " " +sourceId+" ("+line+")");
});
見る:
console.log()
はデバッグ用に正常に機能します。 electron
はブラウザの上に構築されているため、DevTools
のサポートがあり、デバッグ目的でdevtoolsを使用できます。ただし、console.log()
メソッドにはヒステリックな動作があります。 electronアプリのmain process
からconsole.log()
を呼び出すと、アプリを起動した場所からターミナルウィンドウに出力され、renderer process
から呼び出すとDevToolsに出力されますコンソール。