LibSass ist veraltet
Veröffentlicht am 26. Oktober 2020 von Natalie Weizenbaum
Nach vielen Diskussionen im Sass-Kernteam sind wir zu dem Schluss gekommen, dass es an der Zeit ist, LibSass und die darauf aufbauenden Pakete, einschließlich Node Sass, offiziell als veraltet zu deklarieren. Seit mehreren Jahren ist klar, dass einfach nicht genügend Entwicklungsressourcen für LibSass vorhanden sind, um es mit den neuesten Entwicklungen in der Sass-Sprache auf dem neuesten Stand zu halten (zum Beispiel wurde die neueste Sprachfunktion im November 2018 hinzugefügt). So sehr wir auch gehofft haben, dass sich dieses Muster umkehrt, konnten selbst die hervorragende Arbeit der langjährigen LibSass-Beitragenden Michael Mifsud und Marcel Greter mit dem schnellen Tempo der Sprachentwicklung in CSS und Sass nicht Schritt halten.
Ich werde unten näher darauf eingehen, was das bedeutet, aber hier sind die wichtigsten Punkte:
-
Wir empfehlen LibSass nicht mehr für neue Sass-Projekte. Verwenden Sie stattdessen Dart Sass .
-
Wir empfehlen allen bestehenden LibSass-Benutzern, Pläne für die Umstellung auf Dart Sass zu machen, und allen Sass-Bibliotheken, Pläne zu machen, die Unterstützung für LibSass irgendwann einzustellen.
-
Wir planen nicht mehr, neue Funktionen zu LibSass hinzuzufügen, einschließlich der Kompatibilität mit neuen CSS Funktionen.
-
LibSass und Node Sass werden auf unbestimmte Zeit auf bestmöglicher Basis weiter gepflegt, einschließlich der Behebung von schwerwiegenden Fehlern und Sicherheitsproblemen sowie der Aufrechterhaltung der Kompatibilität mit den neuesten Node Versionen.
Warum veraltet erklären?Warum veraltet erklären? Permalink
Seit mehreren Jahren existiert Sass in einem etwas unklaren Zustand, in dem LibSass theoretisch eine offiziell unterstützte Implementierung war, aber seine Funktionsweise praktisch statisch blieb. Mit der Zeit wurde immer deutlicher, dass dieser Zustand erhebliche konkrete Probleme für Sass-Benutzer verursacht. Zum Beispiel sehen wir regelmäßig Benutzer, die sich fragen, warum einfache CSS min() und max() nicht funktionieren und annehmen, dass Sass als Ganzes schuld ist, obwohl es nur LibSass ist, das diese Funktion nicht unterstützt.
Die offizielle Unterstützung für LibSass verursacht nicht nur Probleme für einzelne Benutzer. Da LibSass das im letzten Jahr eingeführte Sass-Modulsystem nicht unterstützt, konnten große gemeinsame Sass-Bibliotheken es nicht nutzen, aus Angst, dass ihre nachgelagerten Benutzer inkompatibel wären. Indem wir klarstellen, dass alle Sass-Benutzer schließlich von LibSass wegwechseln sollten, hoffen wir, es für diese Bibliotheksautoren praktikabler zu machen, modernere Funktionen zu nutzen.
LibSass hat sogar die Entwicklung der Sass-Sprache selbst behindert. Wir konnten den Vorschlag, / als Trennzeichen zu behandeln, nicht umsetzen, weil jeder Code, den sie schreiben würden, entweder zu Veraltungswarnungen in Dart Sass führen oder in LibSass nicht kompiliert werden würde. Indem wir LibSass als veraltet markieren, wird dies deutlich praktikabler, und Sass wird deutlich besser darin, die neuesten Versionen von CSS zu unterstützen.
Was bedeutet "veraltet"?Was bedeutet "veraltet"? Permalink
Wir wählen den Begriff "veraltet", weil er in der Programmiergemeinschaft viel Gewicht hat und ein starkes Signal dafür gibt, dass Benutzer mit der Umstellung von LibSass beginnen sollten. Das bedeutet jedoch nicht, dass das Projekt vollständig tot ist. Michael Mifsud, der Hauptbetreuer von LibSass und Node Sass, hat bestätigt, dass er die Wartung auf dem gleichen Niveau wie in den letzten Jahren fortsetzen möchte. Das bedeutet, dass, obwohl keine neuen Funktionen mehr hinzugefügt werden (und LibSass somit langsam weiter und weiter aus der Kompatibilität mit der neuesten CSS- und Sass-Syntax herausdriften wird), die Wartungs-Releases auf unbestimmte Zeit fortgesetzt werden.
Was ist mit Portabilität und Leistung?Was ist mit Portabilität und Leistung? Permalink
LibSass hat heute zwei Hauptvorteile gegenüber Dart Sass:
-
Portabilität: Da es in C++ geschrieben ist, ist es einfach, LibSass in andere Programmiersprachen einzubetten und eine native API bereitzustellen.
-
Leistung: Der Aufruf von LibSass über die C++ API ist im Vergleich zu Skriptsprachen sehr schnell. Insbesondere bedeutet dies, dass LibSass in JavaScript erheblich schneller ist als Dart Sass, das zu JS kompiliert wurde (obwohl es mit der Befehlszeilenausführung von Dart Sass vergleichbar ist) .
Wir arbeiten daran, beide Aspekte mit dem Sass Embedded Protocol zu beheben, das einen Sass-Compiler als Subprozess ausführt, der über Nachrichtenübermittlung mit jeder Host-Sprache kommunizieren kann. Das Embedded Protocol unterstützt alle Funktionen einer nativen Sass API, einschließlich der Möglichkeit, benutzerdefinierte Importer und Sass-Funktionen zu definieren, und bietet gleichzeitig die hohe Leistung der CLI-Anwendung. Dart Sass hat bereits die Compiler-Seite des Embedded Protocols implementiert, und ein JavaScript-Host dafür ist in aktiver Entwicklung.
Wie migriere ich?Wie migriere ich? Permalink
Wenn Sie ein Benutzer von Node Sass sind, ist die Migration zu Dart Sass unkompliziert: Ersetzen Sie einfach node-sass in Ihrer package.json-Datei durch sass. Beide Pakete stellen die gleiche JavaScript API bereit.
Wenn Sie die SassC-Befehlszeilenschnittstelle verwenden, können Sie zu Dart Sass' CLI wechseln. Beachten Sie, dass diese nicht genau die gleiche Schnittstelle wie SassC hat, sodass Sie möglicherweise einige Flags ändern müssen.
Wenn Sie LibSass über eine Wrapper-Bibliothek in einer anderen Sprache verwenden, können Sie entweder auf die Dart Sass CLI umsteigen oder den Betreuer des LibSass-Wrappers bitten, ihn in einen Host für das Sass Embedded Protocol umzuwandeln. Das Embedded Protocol ermöglicht jeder Sprache, eine native API bereitzustellen, die Dart Sass aufruft.
Bitte beachten Sie, dass LibSass aufgrund der seit mehreren Jahren geringen Aktivität eine Reihe von offenen Fehlern und Verhaltensabweichungen von der Sass-Spezifikation aufweist. Möglicherweise müssen Sie geringfügige Aktualisierungen an Stylesheets vornehmen, um sie mit Dart Sass kompatibel zu machen. Weitere Informationen finden Sie in dieser Liste der wichtigsten Kompatibilitätsprobleme als Referenz.
DankeDanke Permalink
Zum Schluss möchte ich allen danken, die im Laufe der Jahre so viel Zeit und Energie in LibSass und Node Sass investiert haben. Es wird immer eine herausragende Leistung bleiben, und die Popularität von Sass außerhalb der Ruby-Community ist zweifellos zu einem großen Teil auf seine Existenz zurückzuführen. Viele Leute haben versucht, Sass zu implementieren, nur um festzustellen, dass die Sprache viel tiefer und komplexer ist, als sie erwartet hatten, und LibSass allein unter all diesen Implementierungen konnte sich zu einem voll ausgestatteten Werkzeug entwickeln, das für Tausende, wenn nicht Millionen von Benutzern einen echten Mehrwert bietet. Diese Betreuer können stolz auf diese Arbeit sein, und ich hoffe, dass sie sich auch in Zukunft immer als Teil der Sass-Community betrachten werden.