web-dev-qa-db-fra.com

Utilisation de console.log () dans l'application Electron

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;
  });
});
98
Don P

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.

133
Alex Warren

Vous pouvez également ajouter une variable d'environnement dans Windows:

ELECTRON_ENABLE_LOGGING=1

Cela affichera les messages de la console sur votre terminal.

33
deejbee

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.

25
M. Damian Mulligan

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.')
11
raphinesse

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.');
6
David Figatner

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');
5
StefanSL

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);
});
4
Harrison Telfer
process.stdout.write('your output to command Prompt console or node js ')
3
cscsandy5

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.

2
Carlos Galarza

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.

2
jixaw

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:

documentation WebContents

entrée webContents dans les documents BrowserWindow

1
M. Richardson

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.

0
Kiran Maniya