SASS: Doppelten Inhalt beim @import vermeiden

Erstellt am: 14.07.2015 um 14:29 Uhr

Arbeitet man in einem größeren Projekt mit Partial-Dateien, so kann es passieren, dass dieselbe Part-Datei an mehreren Stellen eingebunden wird. Das ist ärgerlich, denn so wächst die generierte CSS-Datei unnötig. Ich gehe in diesem Artikel auf einen möglichen Lösungsansatz ein, der ein mehrfaches generieren von Code unterbinden.

Es ist eigentlich recht simpel. Ich setze am Anfang jeder Partial-Datei eine Variable und prüfe dann – während der Generierung – auf den Wert der Variable.

/* partial/_checkout.scss */
$checkout-generated: false !default;

@if not $checkout-generated {
	$checkout-generated: true;

	.steps {
		display: flex;
		/* und so weiter */
	}
}

/* partial/_last-step.scss */
@import "partial/_checkout";

/* main.scss */
@import "partial/_checkout";

Das Beispiel zeigt, wie aus Versehen in den Dateien _last-step.scss und main.scss die gleiche Datei importiert wurde. Das ist nicht schlimm, denn als wir beim ersten Mal die Datei partial/_checkout.scss aufgerufen haben, stand der Wert der Variable $checkout-generated auf false. Als wir dann in den @if-Block liefen, setzten wir die Variable auf true. Als wir dann ein zweites Mal die Datei aufriefen, ignorieren wir die Variablendeklaration (siehe !default) und liefen weiter zum If-Block. Da die Variable nun auf true stand, fuhr der SASS-Compiler einfach fort.

Warnung ausgeben

Natürlich kann man jetzt noch den If-Block durch eine Warnung erweitern. So wird der Entwickler sofort benachrichtigt, sollte er eine Partial-Datei mehrfach eingebunden haben:

/* partial/_checkout.scss */
@if not $checkout-generated {
	$checkout-generated: true;
	
	/* ... */
} @else {
	@warn "File partial/_checkout has already been included";
}
© 2023 Niklas Köhler