using console.log() with electron

╄→尐↘猪︶ㄣ 提交于 2020-02-05 04:03:04

问题


I have seen a lot of questions from people trying to console log from the rendering process, this is NOT my problem I have console.log littering my main code and I don't see anything in my console here is my code.

/* eslint-disable no-undef */
const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const url = require('url');
/* eslint-enable */

let win;

console.log('console log test');

function createWindow() {
  win = new BrowserWindow({
    width: 800,
    height: 800
  });

  win.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }));

  win.on('close', () => {
    win = null;
  });

  console.log('console log test');
}

app.on('ready', createWindow);

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

app.on('activate', () => {
  if (win == null) {
    console.log('console log test');
    createWindow();
    console.log('console log test');
  }
});

I don't see a single log other than the ones produced by electron itself I've tried throwing errors and those work fine but anything console.* related doesn't work at all, I've tried running it in PowerShell and re-pulling from GitHub, my friend can see the console logs when he pulls the project though so it seems I'm isolated. I've also updated NPM and all modules associated with the project AND I've tried creating a new console and logging to that one but it doesn't seem to show up, am I missing something? I've put hours into this and am ready to give up.


回答1:


I feel your pain. I have this issue on one of my boxes (a Server2012 box). Nothing worked for me until I stumbled across this comment on one of the electron issues threads.

Typically when you install electron you will have a script in your package.json that looks like this.

"scripts": {
    "start": "electron .",
}

I changed mine to

"scripts": {
    "start": "C:/path/to/project/node_modules/electron-prebuilt/dist/electron.exe .",
}

And I started to get logging from the main electron process in powershell.

Note that if you are using newer versions of electron, you may need to change electron-prebuilt to electron.




回答2:


On Windows, if you want to see a console with all your messages from console.log(), you must launch your app with the parameter --enable-logging, for example :

MyApp.exe --enable-logging



回答3:


How about logging directly into the browser console? I have found this to be easier for my workflow.

So what I do is to set a listener on the ipcRenderer to the main process and anytime I needed to log a thing from the main, I just emit to the listerner on the renderer.

For instance, in the renderer.js, I set up like so:

pre.ipcRenderer.on("log", (event,log) => { console.log(log) });

and in the main, wherever I need to log a piece of code, I just insert this line of code:

window.webContents.send("log", [__dirname]);

My Assumptions with the codes above:

  1. You have set nodeIntegration: false in your webPreference object. This is why codes like __dirname will be unavailable on the renderer process.

  2. As a result of the above, you are using a preloader to load all your required node-specific files.

  3. I defined all of them in my preload.js file and ship them into one giant object which I named window.pre

  4. One of the preloaded modules in the pre object is ipcRenderer. This is why I consumed it as pre.ipcRenderer

  5. All of these is to say that, if you are consuming your nodes directly from the renderer process, you wont need to be bothered by my pre. and if not, now you now why I used it.

Ciao.



来源:https://stackoverflow.com/questions/44611317/using-console-log-with-electron

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!