bUwUma - Build System für Webseiten
Build Websites using Make
bUwUma
ist ein Build-System, welches GNU make und einen Präprozessor verwendet, um statische, mehrsprachige Websites zu erstellen.
bUwUma
liefert folgende Funktionen:
- Markdown in die HTML Dateien einbinden
- Nutzung von Variablen
- Konditionale Kontrollstrukturen (if, else)
- SASS Unterstützung
- Generierung einer XML Sitemap
- Generierung von allen notwendigen favicons aus einer Datei
- Generierung von Thumbnails für Videos, Audiodateien und PDFs
- Generierung Web-Optimierter Versionen von Bildern
- Generierung eines (Seiten-)Navigationsmenüs anhand von HTML Überschriften und anpassbaren Links
- Einfache Erstellung einer Seite in mehreren Sprachen
Herangehensweise
bUwUma
versucht, das Erstellen einer klassischen Webseite (html+css+javascript) nach dem DRY und KISS Prinzip zu ermöglichen.
Das bedeutet: Wiederholungen reduzieren und es Simpel halten, damit das Projekt auch in der Zukunft wartbar ist.
Die Erstellung einer Website mit bUwUma
ist ähnlich zur Erstellung eines C-Projekts:
Man hat ein source (Quell-) und ein build Verzeichnis.
Die Quelldateien, also alle HTML-, CSS- und Javascript-Dateien sowie alle Ressourcen wie Bilder und Schriftarten, kommen in das Quellverzeichnis.
make
baut dann die Webseite und legt sie im build Verzeichnis ab.
Dieses kann dann auf den Webserver kopiert werden.
Build-Prozess
Während dem Build-Prozess passiert folgendes:
- HTML Dateien werden vom Präprozessor bearbeitet. Dieser setzt dann sämtliche Variablen ein und bindet zusätzliche Dateien in das Dokument ein (zum Beispiel ein Head, Footer, oder Text in Markdown). Zusätzlich kann aus dem Inhalt ein Seitennavigationsmenü generiert und eingefügt werden. Das resultierende HTML-Dokument wird im build Verzeichnis abgelegt.
- Eine Sitemap im XML Format wird im build Verzeichnis erstellt. Sie enthält Einträge für alle Dateien, in denen der Präprozessor einen
sitemap include
Befehl gefunden hat. - SASS Dateien werden von einem SASS-Compiler kompiliert und die resultierenden CSS-Dateien im build Verzeichnis abgelegt.
- Favicons werden aus einem einzigen Bild erstellt. Dazu gehören das klassische
favicon.ico
sowiefavicon.png
,apple-touch-icon.png
,android-chrome.png
undmstile.png
Varianten. - Thumbnails werden für alle gewünschten Dateien im gewünschten Format im build Verzeichnis erstellt
- Web-optimierte Verseionen werden für alle gewünschten Bilder im gewünschten Format im build Verzeichnis erstellt
- Alle anderen Quelldateien (CSS, Javascript, Resourcen wie Bilder und Fonts) werden in das build Verzeichnis kopiert.
Wenn ein Feature nicht gebraucht wird, kann es im Makefile abgeschaltet werden.
$ cd ~/Website/src
$ make
Making directory ../www/de/
Making directory ../www/en/
Building html de/kontakt.html at ../www/de/kontakt.html
Building html in lang de: common/index.html at ../www/de/index.html
Building html in lang en: common/index.html at ../www/en/index.html
Making directory ../www/style/
Building: style/style.css at ../www/style/style.css
$ ls ../www
de en style
$ ls ../www/de
index.html kontakt.html
$ make clean
Erste Schritte
Um eine Webseite mit bUwUma
zu erstellen, muss man nach der Installation der Abhängigkeiten nur ein paar gut dokumentierte Optionen im Makefile anpassen und eine handvoll Befehle des Präprozessors lernen.
Diese sollten ziemlich intuitiv sein.
bUwUma
ist für Unix entwickelt, benötigt allerdings nur eine geeignete Terminalumgebung.
Dadurch kann im Windows Subsystem für Linux (WSL) oder direkt in Windows genutzt werden, sofern die notwendigen Abhängigkeiten installiert sind.
Abhängigkeiten
- GNU Make: [MacOS - Windows - auf fast allen Linux-Distros bereits installiert]
- Posix konforme Shell: z.B. bash oder zsh [bereits vorhanden auf Linux und MacOS]
- Python >=3.10
- Optional:
- dart-sass: für die Kompilierung von sass
- imagemagick: für die Generierung von Favicons und das Erstellen von Thumbnails
- poppler: für die Generierung von Thumbnails für PDFs
- ffmpeg: für die Erstellung von Thumbnails für Audiodateien [MacOS - Windows - auf fast allen Linux-Distros bereits installiert]
Installation
bUwUma
ist auf github und auf meinem gitea verfügbar.
Es kann mit git installiert werden:
git clone https://github.com/MatthiasQuintern/bUwUma
Alternativ kann man auch einfach Makefile
und html_preprocessor.py
von den obigen Links herunterladen.
Konfiguration
- Pfade im
Makefile
anpassen. Die Variablen in der Datei selbst dokumentiert make print
ausführen und überprüfen, ob die Ausgabe den Erwartungen entsprichtmake
ausführen und zurücklehnen!
nginx
Im Repo liegt zusätzlich liegt eine nginx.conf
, in der man nur die root
Variable anpassen muss.
Anschließend kann die Website mit make start
lokal getestet werden.
HTML-Präprozessor
Der HTML-Präprozessor erlaubt die Verwendung von Variablen, if
und else
Kontrollstrukturen sowie Befehlen wie include
, ähnlich wie der C-Präprozessor.
Sämtliche Befehle sind im Readme des GitHub Repos dokumentiert.
Hier das wichtigste kurz zusammengefasst:
- Alle Befehle befinden sich in HTML-Kommentartags, damit das Syntax Highligting nicht durcheinander kommen
- Ein Befehl muss entweder in einem eigenen Kommentar stehen oder in einer eigenen Zeile (in mehrzeiligen Kommentaren)
- Variablen können überall (ohne Kommentartags) benutzt werden mit:
Hier die wichtigsten Befehle:
include
: Fügt eine andere Datei an dieser Stelle ein. Markdown Dateien werden bei diesem Schritt in HTML konvertiertset
: Weißt einer Variable einen Wert zu
Der include
Befehl ermöglicht zum Beispiel einen einzigen HTML-<head>
für alle Dateien zu verwenden, indem dieser in einem separaten HTML gespeichert und dann mit include
eingefügt wird.
Wenn man dann für jede HTML-Datei einen eigenen Titel verwenden will, kann vor dem include
Befehl eine Variable gesetzt werden, welche dann im <head><title>
Tag genutzt wird.
Erstellen einer Website in mehreren Sprachen
Wenn man eine mehrsprachige Seite möchte, könnte man einfach alle Dateien übersetzen aus einer Sprache übersetzen und in einem anderen Verzeichnis speichern.
Das geht vielleicht recht schnell, wenn man aber später etwas beiden Sprachen ändern möchte, z.B. das Layout, das Stylesheet oder Bilder, wird das ziemlich nervig.
bUwUma
bietet einem zwei bessere Möglichkeiten:
- Man schreibt eine HTML-Vorlage und zwei oder mehr Dateien, die den eigentlichen Text enthalten (der auch in Markdown geschrieben werden kann!) und fügt diese in die Vorlage ein, wobei die spezielle
lang
Variable genutzt werden kann sodass man nur eine Kopie der Vorlage benötigt. - Man schreibt jeweils eine HTML-Datei für beide Sprachen und eine, welche die Teile enthält, die beide Sprachen gemeinsam haben (z.B. eine Reihe von Bildern), und fügt dann die gemeinsame Datei in die anderen ein.
Natürlich können auch beide Lösungen kombiniert werden.