Comment enregistrer des données ou des messages sur la console dans mon application Electron?
Ce monde de salut vraiment basique ouvre les outils de développement par défaut. Je ne peux pas utiliser console.log('hi')
. Existe-t-il une alternative à 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
fonctionne, mais l'emplacement où il se connecte dépend de l'appel du processus principal ou du processus de rendu.
Si vous l'appelez à partir du processus de rendu (c'est-à-dire que JavaScript est inclus dans votre fichier index.html
], il sera enregistré dans la fenêtre des outils de développement.
Si vous l'appelez depuis le processus principal (c'est-à-dire dans main.js
), cela fonctionnera de la même manière que dans Node - il se connectera à la fenêtre du terminal. Si vous démarrez votre processus Electron à partir du terminal en utilisant electron .
, vous pouvez y voir vos appels console.log
du processus principal.
Vous pouvez également ajouter une variable d'environnement dans Windows:
ELECTRON_ENABLE_LOGGING=1
Cela affichera les messages de la console sur votre terminal.
Il existe un autre moyen de se connecter à la console à partir du processus de rendu. Étant donné qu’il s’agit d’Electron, vous pouvez accéder aux modules natifs de Node. Ceci inclut le module console
.
var nodeConsole = require('console');
var myConsole = new nodeConsole.Console(process.stdout, process.stderr);
myConsole.log('Hello World!');
Lorsque ce code est exécuté depuis le processus de rendu, vous obtenez Hello World!
dans le terminal à partir duquel vous avez exécuté Electron.
Voir https://nodejs.org/api/console.html pour plus d'informations sur le module console
.
Une autre possibilité consiste à accéder à la console principale du processus à l’aide de remote.getGlobal(name)
:
const con = require('electron').remote.getGlobal('console')
con.log('This will be output to the main process console.')
Ajoutant à la réponse de M. Damian, voici comment je l’ai configurée pour pouvoir accéder à la console du processus principal à partir de n’importe quel moteur de rendu:
dans votre application principale, ajoutez:
const electron = require('electron');
const app = electron.app;
const console = require('console');
...
app.console = new console.Console(process.stdout, process.stderr);
dans n'importe quel moteur de rendu, vous pouvez ajouter:
const remote = require('electron').remote;
const app = remote.app;
...
app.console.log('This will output to the main process console.');
Vous pouvez utiliser le paquet npm electron-log https://www.npmjs.com/package/electron-log
Il enregistrera votre sortie d'erreur, avertir, info, verbose, débogage, stupide dans votre journal OS natif.
var log = require('electron-log');
log.info('Hello, log');
log.error('Damn it, an error');
Ceci est un suivi de la réponse de cscsandy5 pour quelques informations supplémentaires, informations de ici
process.stdout.write('your output to command Prompt console or node js ')
Ce code est idéal pour la sortie d’un simple message de débogage dans la fenêtre de terminal à partir de laquelle vous avez lancé l’application électronique. Console.log est construit sur le dessus.
Voici un exemple d'extrait (basé sur tutorialspoint electon tutorial) d'un script jQuery qui écrira bonjour au terminal à chaque pression sur le bouton (avertissement: vous devez ajouter vos propres sauts de ligne dans les chaînes de sortie!)
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 ')
C'est ce que j'utilise:
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 + "');");
}
Exemple d'utilisation (identique à console.log
):
log('Error', { msg: 'a common log message' })
log('hello')
Source: https://github.com/Fuse-box/Fuse-box-electron-seed/tree/master/src/main dans le fichier logger.js, vous pouvez voir ici une utilisation réelle Cas.
Tout Alex Warren a écrit est vrai. Il est important de noter comment Electron est lancé. Si vous utilisez le script standard dans le fichier package.json , cela ne fonctionnera pas. Pour que console.log()
work fonctionne, remplacez l’ancien script par ce nouveau.
Le vieux:
"scripts": {
"start": "electron ."
}
Nouveau:
"scripts": {
"start": ".\\node_modules\\electron\\dist\\electron.exe ."
}
Désormais, tous les appels console.log()
sont également affichés dans le terminal.
Désolé de créer un ancien fil de discussion, mais voici le meilleur résultat de "comment afficher console.log sur un terminal" (ou des recherches similaires.
Pour ceux qui cherchent à obtenir un peu plus de contrôle sur ce qui est envoyé au terminal, vous pouvez utiliser webContents.on ('message-console') comme ceci:
mainWindow.webContents.on('console-message', (event, level, message, line, sourceId) => {
console.log(message + " " +sourceId+" ("+line+")");
});
Voir:
console.log()
fonctionnera correctement pour le débogage. Comme le electron
est construit sur le navigateur, il a le support DevTools
que vous pouvez utiliser devtools à des fins de débogage. Cependant, il existe un comportement hystérique de la méthode console.log()
. Lorsque vous appelez la console.log()
à partir de main process
de l'application électronique, elle sera affichée dans la fenêtre du terminal à partir de l'endroit où vous venez de lancer l'application et lorsque vous l'appelez depuis renderer process
, elle sera affichée dans DevTools. console.