LibSass已经被弃用(译文)

112 阅读5分钟

经过Sass核心团队的大量讨论,我们得出的结论是,是时候正式宣布LibSass和基于它构建的包(包括Node-Sas)被弃用了。几年来,很明显LibSass背后没有足够的工程带宽来跟上Sass语言的最新发展(例如,最近的新语言功能是在2018年11月添加的)。尽管我们希望看到这种模式的转变,但即使是LibSass长期贡献者Michael Mifsud和Marcel Greter的出色工作也无法跟上CSS和Sass语言开发的快速步伐。

我将在下面详细介绍这意味着什么,但以下是要点:

  1. 我们不再为新的Sass项目推荐LibSass。请改用Dart Sass
  2. 我们建议所有现有的LibSass用户计划最终转向Dart Sass,并且所有Sass库计划最终放弃对LibSass的支持。
  3. 我们不再计划为LibSass添加任何新功能,包括与新CSS功能的兼容性。
  4. 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语法越来越不兼容),但将无限期地继续发布维护版本。

那么可移植性和性能呢?那么可移植性和性能呢?

相较于Dart Sass,如今的LibSass有两大优势:

  1. 可移植性:由于它是用C++编写的,因此很容易将LibSass嵌入到其他编程语言中,并提供一个原生的API。
  2. 性能:与直接用脚本语言编写代码的速度相比,通过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社区的一部分。

原文地址:sass-lang.com/blog/libsas…

追加:

今天项目流水线node-sass报错,改成sass后确实ok了。

image.png

image.png