Grundsetup für Electron mit TypeScript und React
In diesem Tutorial wird ein einfaches Grundgerüst für eine Electron-Applikation mit React und TypeScript erläutert. Grundkenntnisse in TypeScript/React sowie npm werden vorausgesetzt.
Für den Anfang müssen wir ein leeres Projekt mit npm
initialisieren.
Natürlich kann man das einfach auch "per Hand" machen und im ausgewählten Projektverzeichnis folgende package.json
Datei einfügen:
{ "name": "electron-react-ts", "version": "0.1.0", "main": "main.js", "scripts": { "build": "tsc", "watch": "tsc -w", "lint": "tslint -c tslint.json -p tsconfig.json", "start": "npm run build && electron ./dist/main.js" } }
Die package.json
unterscheidet sich im Moment nicht von der Musterdatei, die schon in dem offiziellen "electron-quick-start-typescript" Projekt (https://github.com/electron/electron-quick-start-typescript) zu finden ist: Die "dist/main.js"-Datei ist die "Start"-Datei der Applikation und wird im Build-Prozess aus der zugehörigen TypeScript-Datei generiert.
Für electron benötigen wir natürlich:
npm install --save-dev electron
Und für TypeScript:
npm install --save-dev typescript
TypeScript wird mit dem Flag "--save-dev" installiert, damit ist es nur in diesem Projekt verfügbar.
Damit der Build des Projektes so wie in package.json
Datei festgelegt funktioniert, muss TypeScript entsprechend konfiguriert werden (in tsconfig.json
):
{ "compilerOptions": { "module": "commonjs", "noImplicitAny": true, "sourceMap": true, "outDir": "dist", "baseUrl": ".", "jsx": "react", "paths": { "*": ["node_modules/*"] } }, "include": [ "src/**/*" ] }
Hier wird neben des src
und dist
Verzeichnisses für TypeScript bzw. transpilierte JavaScript Dateien auch schon die Unterstützung für JSX definiert: "jsx": "react" - ohne diese Zeile können "tsx" bzw. "jsx" Dateien nicht verwendet werden.
Anschliessend müssen wir noch React und ReactDOM zum Projekt hinzufügen (und die entsprechenden "Typings"):
npm install react npm install react-dom npm install --save-dev @types/react npm install --save-dev @types/react-dom
Damit ist auch schon das Grundsetup der Applikation abgeschlossen:
App/ ├── dist/ (generiert im Build-Prozess) │ ├── index.js │ ├── index.js.map │ ├── main.js │ └── main.js.map ├── node_modules/ ├── src/ │ ├── index.tsx │ └── main.ts ├── index.html ├── package.json └── tsconfig.json
Wie schon erwähnt beinhaltet die main.ts
Datei die Grundkonfiguration für Electron und öffnet das Hauptfenster der Applikation, in das die Datei "index.html"
(mit mainWindow.loadFile(path.join(__dirname, "../index.html"))
) geladen wird. Der Code von main.ts
unterscheidet sich nicht wesentlich von dem im offiziellen Tutorial: https://electronjs.org/docs/tutorial/first-app ("main.js ").
Die "index.html"
Datei lädt dann den Applikationscode:
<div id="app"></div> <script>require('./dist/index.js')</script>
mit einer React-Komponente in "index.tsx":
import * as React from 'react'; import * as ReactDOM from 'react-dom'; class App extends React.Component<{}, {}> { render(): JSX.Element { return ( <div> Test </div> ); } } ReactDOM.render( <App />, document.getElementById('app') as HTMLElement );
Das Setup der Applikation ist jetzt vollständig und sie kann mit:
npm run start
auch gestartet werden!