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 sowie favicon.png, apple-touch-icon.png, android-chrome.png und mstile.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:
<spanclass="unaccented">[MacOS](https://formulae.brew.sh/formula/make)[Windows](https://community.chocolatey.org/packages/make)auffastallenLinuxDistrosbereitsinstalliert]**PosixkonformeShell**:z.B.bashoderzsh\[<spanclass="unaccented">bereitsvorhandenaufLinuxundMacOS</span>]**Python>=3.10**Optional:[**dartsass**](https://sasslang.com/dartsass/):fürdieKompilierungvonsass[**imagemagick**](https://imagemagick.org/script/download.php):fürdieGenerierungvonFaviconsunddasErstellenvonThumbnails[**poppler**](https://pdf2image.readthedocs.io/en/latest/installation.html):fürdieGenerierungvonThumbnailsfürPDFs**ffmpeg**:fürdieErstellungvonThumbnailsfürAudiodateien<spanclass="unaccented">\[[MacOS](https://formulae.brew.sh/formula/ffmpeg)[Windows](https://community.chocolatey.org/packages/ffmpeg)auffastallenLinuxDistrosbereitsinstalliert]</span>###InstallationCoDeRePlAcEmEnTpKNdCwMZBMLqlnxDYoistauf[github](https://github.com/MatthiasQuintern/bUwUma)undaufmeinem[gitea](https://git.quintern.xyz/MatthiasQuintern/bUwUma)verfügbar.Eskannmitgitinstalliertwerden:<codeclass="terminalspan">gitclonehttps://github.com/MatthiasQuintern/bUwUma</code>Alternativkannmanaucheinfach[CoDeRePlAcEmEnTZaPUcCJkohrFbEWBzx](https://github.com/MatthiasQuintern/bUwUma)und[CoDeRePlAcEmEnTDqKIRmfJkCXiUinMPL](https://github.com/MatthiasQuintern/bUwUma)vondenobigenLinksherunterladen.###Konfiguration1.PfadeimCoDeRePlAcEmEnTagihIejEcAqWQQmuicanpassen.DieVariableninderDateiselbstdokumentiert2.CoDeRePlAcEmEnTlHnMKCPbpRZExCUmGIausführenundüberprüfen,obdieAusgabedenErwartungenentspricht3.CoDeRePlAcEmEnTaGVJuKlTBbJwLRkjYhausführenundzurücklehnen!###nginxImRepoliegtzusätzlichliegteineCoDeRePlAcEmEnTlzqQAlzrTpdSJoHRLe,indermannurdieCoDeRePlAcEmEnTEUijUFFARXUIViIhGoVariableanpassenmuss.AnschließendkanndieWebsitemitCoDeRePlAcEmEnTgnTKTRHezBksQWqzFRlokalgetestetwerden.###HTMLPräprozessorDerHTMLPräprozessorerlaubtdieVerwendungvonVariablen,CoDeRePlAcEmEnTaLVidcklmfwKRwFhYbundCoDeRePlAcEmEnTZABTODxagkxBicYsDrKontrollstrukturensowieBefehlenwieCoDeRePlAcEmEnTHmTwjNDhRQXInTWqig,ähnlichwieder*C*Präprozessor.SämtlicheBefehlesindim[ReadmedesGitHubRepos](https://github.com/MatthiasQuintern/buwuma)dokumentiert.Hierdaswichtigstekurzzusammengefasst:AlleBefehlebefindensichinHTMLKommentartags,damitdasSyntaxHighligtingnichtdurcheinanderkommenEinBefehlmussentwederineinemeigenenKommentarstehenoderineinereigenenZeile(inmehrzeiligenKommentaren)Variablenkönnenüberall(ohneKommentartags)benutztwerdenmit:CoDeRePlAcEmEnTzKDnliwkwnOZZqIvbPHierdiewichtigstenBefehle:CoDeRePlAcEmEnTgIFGWrrqFoJGihcRNe:FügteineandereDateiandieserStelleein.MarkdownDateienwerdenbeidiesemSchrittinHTMLkonvertiertCoDeRePlAcEmEnTAULHakhBOLzDtZxYEc:WeißteinerVariableeinenWertzuDerCoDeRePlAcEmEnTlDlkQaFpspnqyotzqLBefehlermöglichtzumBeispieleineneinzigenHTMLCoDeRePlAcEmEnTfjPXTzgvIWwfqgjsILfüralleDateienzuverwenden,indemdieserineinemseparatenHTMLgespeichertunddannmitCoDeRePlAcEmEnTDBSLNJVmUOGIzrCxcYeingefügtwird.WennmandannfürjedeHTMLDateieineneigenenTitelverwendenwill,kannvordemCoDeRePlAcEmEnTrLTWKDUvhtrmkzglnxBefehleineVariablegesetztwerden,welchedannimCoDeRePlAcEmEnTCnzkvAylbKwFbPpqPdTaggenutztwird.<!#sidenavnameMehrsprachigeWebseiten><h3id="multilang">ErstelleneinerWebsiteinmehrerenSprachen</h3>WennmaneinemehrsprachigeSeitemöchte,könntemaneinfachalleDateienübersetzenauseinerSpracheübersetzenundineinemanderenVerzeichnisspeichern.Dasgehtvielleichtrechtschnell,wennmanaberspäteretwasbeidenSprachenändernmöchte,z.B.dasLayout,dasStylesheetoderBilder,wirddasziemlichnervig.CoDeRePlAcEmEnTLXWqVyCDwQxGhDlkxybieteteinemzweibessereMöglichkeiten:1.ManschreibteineHTMLVorlageundzweiodermehrDateien,diedeneigentlichenTextenthalten(derauchin*Markdown*geschriebenwerdenkann!)undfügtdieseindieVorlageein,wobeidiespezielleCoDeRePlAcEmEnTXYdRCBfqBdPZTAyATWVariablegenutztwerdenkannsodassmannureineKopiederVorlagebenötigt.2.ManschreibtjeweilseineHTMLDateifürbeideSprachenundeine,welchedieTeileenthält,diebeideSprachengemeinsamhaben(z.B.eineReihevonBildern),undfügtdanndiegemeinsameDateiindieanderenein.NatürlichkönnenauchbeideLösungenkombiniertwerden.REPLHASHDOLLAR(licensegplde)
formula incomplete