Creating your first Electron.js application

We head over to our electron folder, and issue npm init command. It will ask several questions, or you can npm init -y which will say yes to all questions and fill the answers with defaults. It will create a package.json file which you can modify later. I have made a few modifications, and mine looks like this:

{
  "name": "electronapp",
  "version": "1.0.0",
  "description": "My first electron application.",
  "main": "index.js",
  "scripts": {
    "start": "electron ."
  }, 
  "repository": {
    "type": "git", 
    "url": "https://github.com/pranabdas/js-learning/"
  },
  "author": "Pranab Das",
  "license": "ISC",
  "dependencies": {
    "electron": "^8.2.4"
  }
}

Now we need to install Electron. We will install it locally.

npm install electron@latest 

Create entry point of our application which is index.js.

const electron = require("electron"); 

function createWindow() {
    let appWindow = new electron.BrowserWindow({
        height: 600, 
        width: 800
    }); 
    appWindow.loadURL("https://google.com");
}; 

electron.app.on('ready', createWindow); 

Now we can start our application:

npm start 

In some cases, this is all you need to have a wrapped web applications. You run your webapp through a server. You don't need to update the app every time you make changes to your app. But this app requires internet connection to function. And depending on the connection speed, the app may be sluggish. Here we are going to learn to create a local app. All we have to is to load a local file, say index.html instead of the external url.

const electron = require('electron');

function createWindow() {

  // Create the browser window.
  let win = new electron.BrowserWindow({
    width: 800,
    height: 600,
    minWidth: 300,
    minHeight: 300, 
    webPreferences: {
      // in case you need to use node methods in that window 
      nodeIntegration: true 
      }
  });

  // load file index.html 
  win.loadFile('index.html');

  // clear the window once closed 
  win.on('closed', () => {
    win = null;
  });
};

electron.app.on('ready', createWindow);

Where index.html is regular html file.