Skip to main content

Electron@13 as a Gatsby.js Wrapper

Shenzhen, China

Github Repository

Installation

I want to use Electron@13 as a wrapper for an Gatsby.js project. For this I am going to set up a Carbon Design starter and add the latest version of Electron to it:

npx gatsby new electron-carbon https://github.com/carbon-design-system/gatsby-starter-carbon-theme 
cd electron-carbon && npm install --save-dev electron@latest concurrently wait-on

Add a few scripts to the scripts section of the package.json file to be able to start Electron with npm:

"scripts": {
    "build": "gatsby build",
    "build:clean": "yarn clean && gatsby build",
		"build-client": "npm run build && npm run serve",
    "clean": "gatsby clean",
    "dev": "gatsby develop -H 0.0.0.0",
    "dev:clean": "gatsby clean && gatsby develop -H 0.0.0.0",
		"electron": "electron .",
    "serve": "gatsby serve",
		"start": "concurrently --kill-others \"npm run build-client\" \"wait-on tcp:9000 && npm run electron\""
  },

Preparing Electron

Let's now create the index file index.js that the start script above is expecting:

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

function createWindows() {
  let welcomeWindow =  new BrowserWindow();
  welcomeWindow.loadURL('http://localhost:9000');
}

app.on('ready', createWindows);

To test if this is working run those commands in one terminal:

npm run build && npm run server

And in a second terminal run the Electron process once you can see that the page is being served on localhost:9000:

npm run electron

Electron@13 Gatsby Wrapper

It is working!

Running the Electron App

Now we can use our npm Start script to start electron and have it serve the Gatsby build:

npm run start

This will re-run the built, serve the build content and then start Electron to wrap your Gatsby page.