GithubHelp home page GithubHelp logo

Comments (6)

rhysd avatar rhysd commented on June 26, 2024

describe repro

from electron-about-window.

AxelTerizaki avatar AxelTerizaki commented on June 26, 2024

Sample code taken from Electron docs :

const { app, BrowserWindow } = require('electron')
const openAboutWindow = require('about-window')

function createWindow () {
  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  })

  // and load the index.html of the app.
  win.loadFile('index.html')
}

if (app) app.whenReady().then(createWindow);

// Do something else with the app that doesn't require electron

console.log('Yeah');

Here if (app) ensures that we won't try to load the GUI if app is undefined. If it's run with node's runtime (node index.js), app will be undefined, thus the code is avoided, and the code can proceed with stuff that doesn't require Electron.

The problem is that requiring about-window executes the top-level code of the module, which assumes electron is loaded, and thus crashes the main app with an exception. app isn't even the problem here, remote.app is, in about-window code, since remote does not exist in this case.

Hope that helps.

from electron-about-window.

rhysd avatar rhysd commented on June 26, 2024

Thanks for the code. So minimal steps are:

  1. Save below code as foo.js
  2. Run node foo.js
const openAboutWindow = require('about-window')

If it's run with node's runtime (node index.js), app will be undefined

This package does not support the usage without Electron.

Though I'm still not sure to understand the situation, if you want to write up code which supports both Electron and Node.js, you would need to write code like below:

const { app, BrowserWindow } = require('electron')

function createWindow () {
  // Run only on Electron
  const openAboutWindow = require('about-window')

  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  })

  // and load the index.html of the app.
  win.loadFile('index.html')
}

if (app) app.whenReady().then(createWindow);

// Do something else with the app that doesn't require electron

console.log('Yeah');

from electron-about-window.

AxelTerizaki avatar AxelTerizaki commented on June 26, 2024

I used require for the example with JS, but I'm using import (via typescript) and imports are not conditionnal, they're loaded up no matter what, hence my request.

Version 1.13.2 worked just fine, the bug was introduced in 1.13.3 with the call to remote.app without verifying if remote exists.

from electron-about-window.

rhysd avatar rhysd commented on June 26, 2024

I fixed this in 1.13.4. Please update to the latest

from electron-about-window.

AxelTerizaki avatar AxelTerizaki commented on June 26, 2024

Thanks for the quick fix! That works just fine :)

from electron-about-window.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.