Electron es un framework de código abierto creado por Cheng Zhao, y ahora desarrollado por GitHub para crear aplicaciones multiplataforma de escritorio con JavaScript, HTML y CSS, en nuestro caso vamos a añadir React JS para usarlo dentro de Electron.
React JS es un framework de JavaScript creado por Facebook para crear webs SPA… y mucho más.
Para facilitar la configuración de React JS, utilizaremos el CLI Create React App para crear nuestra aplicación de React.
Creando nuestra Aplicación.
npx create-react-app electron-react
cd electron-react
yarn add electron electron-builder --dev
yarn add wait-on concurrently --dev
yarn add electron-is-dev
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const path = require('path');
const isDev = require('electron-is-dev');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({width: 900, height: 680});
mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, '../build/index.html')}`);
if (isDev) {
// Open the DevTools.
//BrowserWindow.addDevToolsExtension('<location to your react chrome extension>');
mainWindow.webContents.openDevTools();
}
mainWindow.on('closed', () => mainWindow = null);
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (mainWindow === null) {
createWindow();
}
});
"electron-dev": "concurrently \"BROWSER=none yarn start\" \"wait-on http://localhost:3000 && electron .\""
Este script solo esperará hasta que React ejecute la aplicación React en localhost:3000 antes de iniciar Electron.
"main": "public/electron.js",
Y el package.json tendrá que quedar como el siguiente ejemplo.
{
"name": "electron-react",
"version": "1.0.0",
"private": true,
"dependencies": {
"electron-is-dev": "^1.0.1",
"react": "^16.8.3",
"react-dom": "^16.8.3",
"react-scripts": "2.1.5"
},
"main": "public/electron.js",
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"electron-dev": "concurrently \"BROWSER=none yarn start\" \"wait-on http://localhost:3000 && electron .\""
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
],
"devDependencies": {
"concurrently": "^4.1.0",
"electron": "^4.0.6",
"electron-builder": "^20.38.5",
"wait-on": "^3.2.0"
}
}
yarn electron-dev
Resultado final.