Dieser Electron Quick Start Guide gibt einen Überblick über das Einrichten und die Entwicklung einer Desktop-App mit dem Electron-Framework.
Eine ausführlichere Version mit Erklärungen ist unter den folgenden Links verfügbar.
Electron Quick Start – Inhalt
- Wichtige Ressourcen
- Initialisieren des Projekts
- Electron installieren
- Main.js
- Preload.js
- index.html, index.js, index.css
- Packaging mit Electron-Packager
Wichtige Ressourcen
- VS-Code
- Node.js
- Electron Website & Documentation
- Electron Documentation: Quick-Start
- Electron-Packager Documentation
Initialisieren des Projekts
- Projektverzeichnis erstellen
cd
&mkdir
- Node / NPM updaten & Installation prüfen
node -v
npm -v
npm update - App initialisieren
npm init
- „Scripts“ in package.json anpassen zu:
{
...
"scripts": {
"start": "electron ."
},
...
}
Code-Sprache: JavaScript (javascript)
Electron installieren
- Electron installieren
npm install --save-dev electron
main.js
// Module Laden
const { app, BrowserWindow, Menu, MenuItem, ipcMain } = require('electron');
const path = require("path");
// Fenster definieren
let window;
// Menü definieren
const menu = new Menu()
menu.append(new MenuItem({
label: 'Electron',
submenu: [{
label: 'Dev-Tools',
accelerator: 'Ctrl+d',
click: () => window.webContents.openDevTools()
},{
label: 'App schließen',
accelerator: 'Ctrl+q',
click: () => app.quit()
}],
}))
menu.append(new MenuItem({
label: 'Test',
submenu: [{
label: 'IPC',
click: () => trigger_IPC()
}],
}))
Menu.setApplicationMenu(menu)
// Fenster definieren
const createWindow = () => {
window = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
enableRemoteModule: false,
preload: path.join(__dirname, "preload.js")
},
}),
window.loadFile('index.html')
}
// Render-Prozess starten
app.whenReady().then(() => {
createWindow()
})
// Ausführung beenden, wenn Render-Prozess beendet
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})
// IPC senden
function trigger_IPC () {
window.webContents.send ('event1','Hi main.js hier!')
}
// IPC empfangen
ipcMain.on('answer1', (event, data) => {
console.log(data)
})
ipcMain.on('answer2', (event, data) => {
console.log(data)
})
Code-Sprache: JavaScript (javascript)
preload.js
// Module laden
const {contextBridge, ipcRenderer} = require('electron')
// APIs im Render-Prozess verfügbar machen
contextBridge.exposeInMainWorld(
'electron',
{
answer2: (data) => ipcRenderer.send('answer2', data),
}
)
// IPC beantworten, wenn IPC von Main empfangen wird
ipcRenderer.on('event1', (event, data) => {
console.log(data)
ipcRenderer.send('answer1','Hi main.js, hier ist preload.js')
})
Code-Sprache: JavaScript (javascript)
index.html, index.js & index.css
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="index.css">
<title>Tutorial-App</title>
</head>
<body>
<h1>Hi, ich bin index.html!</h1>
<a onclick="index_ipc()">Klick!</a>
</body>
<script src="index.js"></script>
</html>
Code-Sprache: HTML, XML (xml)
index.css
body {
background-color: darkblue;
color: white;
}
Code-Sprache: CSS (css)
index.js
function index_ipc () {
window.electron.answer2('Hi zusammen, hier ist auch noch index.js!')
}
Code-Sprache: JavaScript (javascript)
Packaging der App
- Electron-Packager installieren
npm install electron-packager --save-dev
- PS Execution Policies anpassen
Get-ExecutionPolicy -List
set-executionpolicy remotesigned
Nach Export:set-executionpolicy restricted
- Packaging starten
electron-packager . test-app --plattform=win32 --asar
Eine ausführlichere Version mit Erklärungen ist unter den folgenden Links verfügbar.