Electron – Mit UI5 Desktop-Apps entwickeln

Moin Moin, heute will ich mit dir aus einer bestehenden UI5-Anwendung eine Desktop App erstellen. Das machen wir mit Electron.

Electron ist ein freies Framework für Dektop Apps, dass von GitHub entwickelt wurde und mittlerweile in vielen modernen Anwendungen zum Einsatz kommt. Electron-Anwendungen können auf Linux, macOS und Windows laufen.

[0]: Vorbereitungen

Bevor wir loslegen, müssen wir ein paar Dinge vorbereiten. Du brauchst eine fertige SAP UI5 Applikation. Wenn du gerade keine Applikation zur Hand hast, kannst du die App aus dem UI5 Walkthrough nehmen. Öffne also einmal die URL zu der App und klick oben rechts auf Download.

Dann muss bei dir NodeJS installiert sein. Falls du das noch nicht hast, gehst du einmal auf die Webseite und lädst die LTS Version herunter (bei mir ist es 10.15.x). Folge einfach den Installationsanweisungen.

Wenn du das erledigt hast, lädst du noch die SAP UI5 Runtime herunter, diese brauchen wir damit unsere App offline laufen kann.

[1]: Projekt anlegen

Als nächstes erstellen wir ein neues Verzeichnis für unser Projekt, mein neues Projekt heißt saptron.

Jetzt brauchen wir die Konsole, wechsel einmal in deinen Projektverzeichnis saptron und gib npm init ein. npm wird dich durch die Erstellung deines neuen Projekts leiten, die Default-Werte sind ausreichend.

C:\Users\benjamin\projekte\saptron>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (saptron)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to C:\Users\benjamin\saptron\package.json:

{
  "name": "saptron",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)

Jetzt liegt in deinem saptron-Verzeichnis eine neue Datei. Auf diese kommen wir später noch mal zurück. Als nächstes öffnest du das sap.m.tutorial.walkthrough.25.zip und kopierst das Verzeichnis webapp in das saptron-Verzeichnis.

Unser Projektverzeichnis saptron.
Unser Projekt-Verzeichnis.

Damit sind unsere Vorbereitungen abgeschlossen. Bis jetzt hast du das eigentlich ganz gut gemacht.

[2]: Electron App erstellen

Als nächstes legst du eine neue Datei index.js an und füllst sie mit folgendem Inhalt.

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

let mainWindow;

app.on('ready', () => {
            mainWindow = new BrowserWindow({ 
                width: 800, 
                height: 600,
                webPreferences: {
                        nodeIntegration: false   
                } 
        });
        mainWindow.loadURL('file://' + __dirname + '/webapp/index.html');
});

Das ist der Einstiegspunkt für unsere App. Hier wird ein neues Browser Fenster erstellt und die index.html aus unserer webapp geladen.

Jetzt benötigen wir noch Electron, dafür öffnest du wieder die Konsole und gehst in das saptron-Verzeichnis dort führst du npm install electron --save-dev aus. Sobald npm fertig ist sieht dein Verzeichnis schon etwas anders aus.

package-lock.json und node_modules
package-lock.json und node_modules

Öffne einmal die package.json.

{
  "name": "saptron",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^5.0.1"
  }
}

Wie du siehst gibt es jetzt eine neue Sektion “devDependencies” und darin das Paket electron. Die Developer Dependencies werden nur während der Entwicklung benötigt. In der fertigen Applikation landen nur die Teile von Electorn, die wir auch benutzen.

Da wir Datei schon mal offen haben, ersetzt du den Inhalt von “scripts” so wie oben.

In dem node_modules-Verzeichnis findest du electron und alle seine Abhängigkeiten. In dem package-lock.json sind alle Pakete mit ihrer Version und Abhängigkeiten festgehalten.

[3]: Testlauf

In der Konsole, gibst du jetzt einmal npm start ein. Es öffnet sich ein neues Fenster und siehe da unsere App erscheint auf dem Bildschirm.

Electron erster start
Erster Start unserer neuen Electron SAP UI5 App.

Sieht doch eigentlich schon ganz gut aus, oder? Aber noch ist unsere App nicht so richtig offline-fähig, denn noch lädt sie die SAP UI5 Bibliothek über das Internet nach.

Jetzt kopierst du das resources Verzeichnis aus der SAP UI5 Runtime in unser Projektverzeichnis.

Das Projektverzeichnis mit resources
Das Projektverzeichnis mit den resources

Damit die neuen Ressourcen auch genutzt werden, müssen wir die index.html im webapp Verzeichnis anpassen. In Zeile 9 wird die URL durch den Pfad zur SAP UI5 Runtime ersetzt.

Anpassen der Resources
Die index.html aus der webapp, bereits angepasst.

Wenn du die App jetzt wieder mit npm start aufrufst wird sie die UI5 Bibliothek nicht mehr aus dem Netz nachgeladen.

[4]: Die Electron App bauen

Zum Abschluss wollen wir noch ausführbare Binarys erstellen, dafür fügen wir ein weiteres Paket zu unserem Projekt hinzu.

npm install electron-packager --save-dev

Unserem package.json fügen wir einen neuen Befehl hinzu.

{
  "name": "saptron",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "build": "electron-packager . saptron --overwrite --platform win32 --arch x64 --out dist/"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^5.0.1",
    "electron-packager": "^13.1.1"
  }
}

Mit npm run build starten wir den den Prozess. Sobald der packager fertig ist, finden wir in dist/saptron-win32-x64 unsere Windows Anwendung.
Um auch noch für Linux und macOS zu kompilieren, ändern wir erneut das package.json.

{
  "name": "saptron",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "win": "electron-packager . saptron --overwrite --platform win32 --arch x64 --out dist/",
    "mac": "electron-packager . saptron --overwrite --platform darwin --arch x64 --out dist/",
    "lin": "electron-packager . saptron --overwrite --platform linux --arch x64 --out dist/"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^5.0.1",
    "electron-packager": "^13.1.1"
  }
}

Du ahnst vermutlich bereits, wie du auch für Linux und macOS, ausführbare Anwendungen bauen kannst, probier es einfach mal aus.

Damit beenden wir unseren kleinen Ausflug in die Welt von Electron. Man kann mit diesem Framework natürlich noch viel mehr machen aber für einen Einstieg war das doch schon mal ganz gut oder?

Noch Zeit? Dann guck dir doch mal einen von unseren anderen UI5 Artikeln an.

Du interessierst dich für Fiori und hast Lust coole Projekte mit uns zu machen? Wir suchen dich! Schau doch mal in unserer Stellenbeschreibung vorbei.

Über den Autor

Benjamin Brahmer

Kommentar verfassen