LibSass 已棄用
由 Natalie Weizenbaum 發佈於 2020 年 10 月 26 日
經過 Sass 核心團隊多次討論,我們得出結論,正式宣告 LibSass 及其衍生套件(包括 Node Sass)已棄用。多年來,LibSass 的工程能量不足以使其跟上 Sass 語言的最新發展,這是顯而易見的(例如,最新的語言功能是在2018 年 11 月加入的)。儘管我們一直希望看到這種情況有所好轉,但即使是長期 LibSass 貢獻者 Michael Mifsud 和 Marcel Greter 的出色工作,也無法跟上 CSS 和 Sass 快速的語言發展步伐。
我將在下方詳細說明這代表的意義,但以下是幾個重點:
-
我們不再建議將 LibSass 用於新的 Sass 專案。請改用Dart Sass。
-
我們建議所有現有的 LibSass 使用者規劃最終遷移到 Dart Sass,並且所有 Sass 函式庫也規劃最終停止支援 LibSass。
-
我們不再計畫為 LibSass 添加任何新功能,包括與新的 CSS 功能的相容性。
-
LibSass 和 Node Sass 將繼續無限期地以盡力而為的方式維護,包括修復重大錯誤和安全性問題,以及維持與最新 Node 版本的相容性。
為何棄用?為何棄用?永久連結
多年來,Sass 一直處於一種模稜兩可的狀態:理論上,LibSass 是一個官方支援的實作,但在實務上,它的功能卻是靜態的。隨著時間的推移,越來越清楚的是,這種狀態會給 Sass 使用者帶來許多具體的問題。例如,我們經常看到使用者對於為何純 CSS 的 min()
和 max()
無法運作感到困惑,並認為是 Sass 整體的錯誤,而實際上只有 LibSass 不支援該功能。
官方對 LibSass 的支援不僅會造成個別使用者的困擾。由於 LibSass 不支援去年推出的Sass 模組系統,主要的共享 Sass 函式庫一直無法使用它,因為擔心它們的下游使用者會不相容。藉由明確指出所有 Sass 使用者最終都應該遷移到 LibSass 之外,我們希望讓這些函式庫作者更容易使用更現代的功能。
LibSass 甚至阻礙了 Sass 語言本身的發展。我們一直無法推進將 /
視為分隔符號的提案,因為他們編寫的任何程式碼在 Dart Sass 中都會產生棄用警告,或者在 LibSass 中無法編譯。將 LibSass 標記為棄用後,這將變得更加可行,Sass 也將能更好地支援最新版本的 CSS。
「棄用」是什麼意思?「棄用」是什麼意思?永久連結
我們選擇使用「已棄用 (deprecated)」這個詞,因為它在程式設計社群中具有相當大的份量,並強烈暗示使用者應該開始規劃遷移,不再使用 LibSass。然而,這並不意味著該專案完全終止。LibSass 和 Node Sass 的主要維護者 Michael Mifsud 已確認,他計劃繼續維持與過去幾年相同的維護水平。這表示雖然不會再新增任何功能(因此 LibSass 將逐漸與最新的 CSS 和 Sass 語法不相容),但仍會無限期地繼續發布維護版本。
那可攜性和效能呢?那可攜性和效能呢?永久連結
LibSass 目前相較於 Dart Sass 有兩個主要優點:
-
可攜性:由於它是以 C++ 撰寫的,因此可以輕鬆地將 LibSass 嵌入其他程式語言中,並提供原生感受的 API。
-
效能:透過 C++ API 呼叫 LibSass 的速度相較於直接以腳本語言撰寫的程式碼要快得多。尤其,這表示 LibSass 在 JavaScript 中的速度明顯快於編譯成 JS 的 Dart Sass(儘管它與 Dart Sass 的命令列執行檔速度相當)。
我們正在努力透過 Sass 嵌入式協定 來解決這兩個問題,該協定將 Sass 編譯器作為子程序運行,可以透過訊息傳遞與任何主機語言通訊。嵌入式協定支援原生 Sass API 的所有功能,包括定義自訂匯入器和 Sass 函式的能力,同時也提供 CLI 應用程式的高效能。Dart Sass 已經實作了嵌入式協定的編譯器端,而其 JavaScript 主機正在積極開發中。
如何遷移?如何遷移?永久連結
如果您是 Node Sass 的使用者,遷移到 Dart Sass 很簡單:只需在您的 package.json
檔案中將 node-sass
替換為 sass
。這兩個套件都公開相同的 JavaScript API。
如果您正在使用 SassC 命令列介面,您可以切換到 Dart Sass 的 CLI。請注意,它的介面與 SassC 並不完全相同,因此您可能需要更改一些旗標。
如果您透過另一種語言的包裝函式庫使用 LibSass,您可以切換到 Dart Sass CLI,或要求 LibSass 包裝函式庫的維護者將其轉換為 Sass 嵌入式協定 的主機。嵌入式協定允許任何語言提供呼叫 Dart Sass 的原生 API。
請注意,由於 LibSass 的活動在過去幾年中一直很低,它存在一些未解決的錯誤以及與 Sass 規範的行為差異。您可能需要對樣式表進行一些小幅更新,使其與 Dart Sass 相容。請參閱這個主要相容性問題列表以供參考。
謝謝您謝謝您 永久連結
最後,我要感謝多年來為 LibSass 和 Node Sass 投入大量時間和精力的每一個人。這將永遠是一項卓越的成就,而 Sass 在 Ruby 社群之外的普及無疑很大程度上歸功於它的存在。許多人嘗試實現 Sass,卻發現這門語言比他們預期的要更加深入和複雜,而 LibSass 在所有這些實現中是唯一一個功能齊全,足以為成千上萬甚至數百萬用戶提供真正價值的實現。這些維護者應該為這項工作感到自豪,我希望他們未來也能一直將自己視為 Sass 社群的一 份子。