VueJS und GoLang

Die Go-Anwendungen werden häufig mit dem Internen Vorlagensystem erstellt, welches für statische Webseiten sehr gut ist, sobald dynmic ins Spiel kommt, muss wieder mit Client-Bibliotheken gearbeitet werden. Daher wollte ich nun ein System aufbauen, bei dem die Client-Seite komplett mit VueJS entwickelt wird und im Backend, für die APIs, Go verwendet wird. Damit nun so eine Anwendung als als Single-Datei funktioniert, sind ein paar Einstellungen und Strukturen zu beachten.

Vorbereitung

Zuerst gehen wir auf die notwendige Software und Erweiterungen ein, mit denen das Programmierleben vereinfacht wird.

Software Beschreibung Arch-Linux
Visual Studio Code Editor und Projektverwaltung pacman -S code
NodeJS + npm/yarn Entwicklungsgrundstock für VueJS (ob npm oder yarn soll jeder selbst entscheiden) pacman -S nodejs npm yarn
GoLang Compiler für Go pacman -S go
make Make-Dateien für einfachere Ausführung pacman -S make
docker Container zum einfach erzeugen von z.B. DB-Server yay -S docker
migrate Vereinfachte migration von Datenbanken [Download][1]

Und die nachfolgenden Erweiterung, um z.B. eine bessere Unterstützung im Editor für Syntax-Hightlighting, IntelitySense, Code-Formatierung und weiteres zu bekommen:

Erweiterung Software
Veture (für VueJS) Visual Studio Code
Go for Visual Studio Code Visual Studio Code
Vue.js devtools Browser (Chrome, Brave, Opera)

Nun installieren wir noch die cli für VueJS, um das erstellen der Projekte deutlich zu vereinfachen:

# Installieren
npm install -g @vue/cli
# oder
yarn global add @vue/cli

# Version prüfen
vue --version

# Aktualisieren
npm update -g @vue/cli
# oder
yarn global upgrade --latest @vue/cli

Go Projekt erstellen

TODO: Hier das erstellen hin mit Beschreibung des Aufbaus + MAKEFILE

TODO: Beginnen mit den aufbau der ersten API-Aufrufe ohne DB

TODO: Migrations + Docker (Und die Tücken des SuperUsers => Verweis FAQ) und Anpassung MAKEFILE + Umstellung im Code

VueJS Projekt erstellen

Mit der cli kann das Projekt direkt erzeugt werden. Wer es mag, kann es auch über die Web-UI erstellen. Hier wird der Weg über die cli gezeigt, welcher auch auf die Web-UI übernommen werden kann.

# Startet die in VueJS geschriebene Projektverwaltung
vue ui
# Erstelle ein neues Standardprojekt
vue create <new_name>
  • <new_name> durch einen sprechenden Namen ersetzen, typischerweise nennen wir es hier frontend und erzeugen es innerhalb des Go-Projektes
  • Manually select features
  • Notwendige Features:
    • Choose Vue version
    • Babel
  • Weiere Features mit Beschreibung:
    • Router: Notwendig für Seitenumschaltungen als SinglePage Application
    • Vuex: Globaler Statusmanager
    • CSS Pre-processors: Verwendung von SASS-Dateien
    • Linter / Formatter: Automatische Formatierung und Syntax-Prüfung
    • Unit Testing: Framework für Komponententests
    • E2E Testing: End-to-End-testing
  • 3.x
  • In dedicated config files
  • Speicherung für nachfolgende Projekt kann selbst entschieden werden
  • Sollte die Abfrage noch kommen welcher Packetmanager verwendet werden soll, dann bitte den gewünschten auswählen

Danach wird das Projekt erzeugt und alle notwendigen Packet heruntergeladen und im Projekt erstellt. Danach kann das Projekt mit nachfolgenden Aufruf gestartet werden.

cd frontend
yarn serve
# oder
npm run serve

Typischerweise findet man nun unter http://localhost:8080/ die erstellte Beispielseite. Mit dem oben genannten Aufruf wird der Server mit Hot Reload gestartet. Diese bedeutet, dass bei einer Änderungen in den Quelldateien nach dem speichern die Seite im Browser automatisch aktualisiert wird. Dadurch kann man nun den Code direkt bearbeiten und sieht sofort im Webbrowser die entsprechenden Änderungen.

TODO: Erstellung von RestAPI-Abfragen

TODO: Einbindung von json-testserver und dem proxy für die Entwicklungsumgebung => Was auch gut für die Integration ist

Einbindung von VueJS in Go

TODO: Anpassungen in Go um die Dateien als embeded aufzunehmen

TODO: Anpassung MAKEFILE das beim Build erstmal das VueJS-Projekt erstellt wird und danach Go gebaut wird

FAQ

TODO: Proxy für VueJS, und zeigen wie man die 2 Projekte mit dem jeweiligen Tool starten kann

TODO: Docker Einstellungen im Sinne des SU-Problems