LibSass 已弃用
2020 年 10 月 26 日发布者 Natalie Weizenbaum
在 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。
“已弃用”是什么意思?“已弃用”是什么意思? 永久链接
我们选择使用“已弃用”一词,因为它在编程界具有很大的分量,并向用户发出强烈的信号,表明他们应该开始计划迁移出 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 社区的一部分。