Warum noch ein Bootstrap‑Bundle?
Wer in Symfony Projekte Bootstrap anpasst, landet schnell bei SCSS. Häufig zieht man dafür Node‑basierte Toolchains heran – muss man aber nicht. Das neue JBSNewMedia Bootstrap Bundle setzt komplett auf PHP und nutzt scssphp zum Kompilieren der Styles. Ergebnis: weniger Setup‑Aufwand, keine zusätzliche Runtime, klare Defaults.
Features im Überblick
- Sofort einsatzbereite SCSS‑Einträge (light und dark)
- SCSS ➝ CSS via scssphp (reines PHP, kein Node nötig)
- Import‑Pfad‑Vorkonfiguration für
vendor/twbs/bootstrap/scss - Optionale Source Maps (
--source-map) - Sinnvolle Defaults: komprimierter Output, Standardpfade
Anforderungen
- PHP ≥ 8.2
- Symfony 6.4 oder 7.x (framework‑bundle, console)
- Composer
- Abhängigkeiten:
twbs/bootstrap(≥ 5.3),scssphp/scssphp(getestet ab ≥ 1.12)
Hinweis: Das Bundle ist ein reguläres Symfony‑Bundle und wird über den Kernel automatisch registriert.
Installation
composer require jbsnewmedia/bootstrap-bundle
Composer zieht – falls noch nicht vorhanden – die benötigten Pakete (twbs/bootstrap, scssphp/scssphp).
Nutzung in 2 Schritten
1) SCSS‑Einträge anlegen
php bin/console bootstrap:init
# Vorschau ohne Schreiben
php bin/console bootstrap:init --dry-run
# Bestehende Dateien überschreiben
php bin/console bootstrap:init --force
Erstellt werden standardmäßig:
assets/scss/bootstrap5-custom.scssassets/scss/bootstrap5-custom-dark.scss
Beide Einträge importieren Bootstrap nach deinen Variablen‑Overrides in korrekter Reihenfolge.
2) SCSS ➝ CSS kompilieren
php bin/console bootstrap:compile
Defaults:
- Input:
assets/scss/bootstrap5-custom.scss - Output:
assets/css/bootstrap.min.css - Output‑Style: compressed
Source Map erzeugen:
php bin/console bootstrap:compile --source-map
Eigene Pfade:
php bin/console bootstrap:compile path/to/entry.scss public/css/app.css
Kommando‑Referenz
bootstrap:init
Scaffoldet Bootstrap‑SCSS‑Einträge.
- Optionen:
--dry-run– zeigt anstehende Änderungen ohne zu schreiben-f, --force– überschreibt vorhandene Dateien- Alias:
boostrap:init(häufiger Tippfehler)
Die folgenden Dateien werden in assets/scss/ angelegt:
bootstrap5-custom.scss(light)bootstrap5-custom-dark.scss(dark)
Empfohlene Reihenfolge in den Dateien: functions → eigene Variablen → Bootstrap‑Import.
bootstrap:compile
Kompiliert SCSS zu CSS mit scssphp.
- Argumente:
input(optional) – SCSS‑Entry; Defaultassets/scss/bootstrap5-custom.scssoutput(optional) – CSS‑Zieldatei; Defaultassets/css/bootstrap.min.css- Optionen:
--source-map– schreibt eine.mapneben die CSS‑Datei
Vorkonfigurierte Include‑Pfade (in dieser Reihenfolge):
vendor/twbs/bootstrap/scssvendorassets/scssassets
Damit sind Imports wie diese ohne Relativpfade möglich:
@import "functions";
@import "variables";
@import "bootstrap";
Source‑Map‑Verhalten
Mit --source-map wird die Map nach der Kompilierung gespeichert, z. B.:
- CSS:
assets/css/bootstrap.min.css - Map:
assets/css/bootstrap.min.css.map
Beispielausgabe:
Compiled assets/scss/bootstrap5-custom.scss -> assets/css/bootstrap.min.css
Source map written: assets/css/bootstrap.min.css.map
Beispiel‑SCSS
Light (erstellt durch bootstrap:init):
// Projektweite Bootstrap-Konfiguration
// -----------------------------------
// Reihenfolge: zuerst functions, dann Variable-Overrides,
// am Ende Bootstrap importieren.
// 1) Bootstrap functions (für Variablen‑Berechnungen)
@import "functions";
// 2) Eigene Variablen (ohne !default, damit sie greifen)
$primary: #ff0000;
// 3) Optional: Bootstrap‑Basisvariablen
@import "variables";
// 4) Komplettes Bootstrap importieren
@import "bootstrap";
Dark (erstellt durch bootstrap:init):
// Dark-Mode Build für Bootstrap
// -----------------------------------
// 1) Bootstrap functions
@import "functions";
// 2) Dark‑spezifische Variablen
$body-bg: #121212;
$body-color: #e6e6e6;
$primary: #0d6efd;
// Optional: zusätzliche Maps/Variablen
@import "variables";
// 3) Komplettes Bootstrap
@import "bootstrap";
Troubleshooting
- Input‑Datei nicht gefunden
php bin/console bootstrap:initausführen, um Standard‑Entries zu erzeugen, oder eigenen Pfad anbootstrap:compileübergeben.- Bootstrap‑Imports werden nicht aufgelöst
- Prüfen, ob
twbs/bootstrapinstalliert ist:composer require twbs/bootstrap. - Source‑Map‑Kommentar vorhanden, aber keine Datei geschrieben
- Die Map wird am Ende des Builds geschrieben. Prüfe, ob
--source-mapgesetzt ist und die SCSS‑Quelle tatsächlich Output erzeugt. - scssphp Versionen
- Seit scssphp ≥ 1.12 liegen Source‑Map‑Konstanten auf
Compiler. Das Bundle ist darauf ausgelegt.
Fazit
Das JBSNewMedia Bootstrap Bundle ist ideal, wenn du Bootstrap‑SCSS in Symfony ohne Node‑Toolchain bauen möchtest. Einfache Kommandos, sinnvolle Defaults und Vendor‑aware Importpfade sorgen für einen schnellen, zuverlässigen Workflow – rein mit PHP.
Links
- Quelle auf GitHub: https://github.com/jbsnewmedia/bootstrap-bundle
- Bootstrap: https://getbootstrap.com/
- scssphp: https://github.com/scssphp/scssphp