【问题标题】:using console.log() with electron将 console.log() 与电子一起使用
【发布时间】:2017-11-20 12:48:45
【问题描述】:

我已经看到很多人试图从渲染过程中控制台日志,这不是我的问题我有 console.log 乱扔我的主要代码,我在我的控制台中看不到任何东西这是我的代码。

/* 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');
  }
});

除了电子本身产生的日志之外,我没有看到任何日志 我尝试抛出错误并且这些工作正常,但任何与控制台相关的东西都不起作用,我尝试在 PowerShell 中运行它并从 GitHub 重新拉取,我的朋友在拉取项目时可以看到控制台日志虽然如此看来我是孤立的。我还更新了 NPM 和与该项目相关的所有模块,并且我尝试创建一个新控制台并登录到该控制台,但它似乎没有出现,我错过了什么吗?我已经为此投入了数小时,并准备放弃。

【问题讨论】:

    标签: javascript node.js electron console.log


    【解决方案1】:

    我感觉到你的痛苦。我的一个盒子(一个 Server2012 盒子)有这个问题。直到我在一个电子问题线程上偶然发现 this comment 之前,没有什么对我有用。

    通常,当您安装 electron 时,您的 package.json 中会有一个如下所示的脚本。

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

    我改成了

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

    我开始从 powershell 中的主电子进程获取日志记录。

    请注意,如果您使用较新版本的电子,您可能需要将electron-prebuilt 更改为electron

    【讨论】:

      【解决方案2】:

      在 Windows 上,如果您想查看包含来自 console.log() 的所有消息的控制台,您必须使用参数 --enable-logging 启动您的应用,例如:

      MyApp.exe --enable-logging
      

      【讨论】:

        【解决方案3】:

        直接登录浏览器控制台怎么样? 我发现这对我的工作流程来说更容易。

        所以我要做的是在 ipcRenderer 上为主进程设置一个侦听器,并且每当我需要从主进程记录一个东西时,我只需向渲染器上的侦听器发出。

        例如,在 renderer.js 中,我是这样设置的:

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

        主要是,在我需要记录一段代码的地方,我只需插入这行代码:

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

        我对上述代码的假设:

        1. 您在 webPreference 对象中设置了nodeIntegration: false。这就是为什么 __dirname 这样的代码在渲染器进程中不可用的原因。

        2. 由于上述原因,您正在使用预加载器来加载所有需要的特定于节点的文件。

        3. 我在我的 preload.js 文件中定义了所有这些并将它们发送到一个我命名为 window.pre 的巨型对象中

        4. pre 对象中的一个预加载模块是 ipcRenderer。这就是为什么我把它当作pre.ipcRenderer

        5. 1234563 /p>

        Ciao.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-01
          • 2019-12-04
          • 2021-10-22
          • 2023-03-22
          • 2015-12-06
          • 2016-11-14
          • 2015-08-16
          • 2016-10-09
          相关资源
          最近更新 更多