将 Dart Sass 编译器嵌入到您的 Swift 程序中。 使用 Swift 编写样式表导入器和 SassScript 函数。
此软件包提供了一个 Swift 语言接口,用于与独立的 Sass 实现进行交互。 通过 DartSass
模块,您可以访问 Dart Sass,它是 Sass 语言的最新实现。 它将 Dart Sass 编译器作为一个独立的进程运行,并使用 Sass 嵌入式协议与其进行通信。 如果您遇到该协议“编译器”端的其他实现,那么它也应该可以正常工作。
目前此软件包不支持 LibSass。 更多信息。
最简用法
import DartSass
let compiler = try Compiler()
let results = try await compiler.compile(fileURL: scssFileURL)
print(results.css)
尽管编译器输出的结构更加复杂,但如果这只是您想做的,那么您最好直接运行该二进制文件。 使用此软件包的原因是提供 @use
规则的自定义实现来加载内容,以及自定义函数来提供特定于应用程序的行为。
struct ExtrasImporter: Importer {
func canonicalize(ruleURL: String, context: ImporterContext) async throws -> URL? {
guard ruleURL == "extras" else {
return nil
}
return URL(string: "custom://extras")
}
func load(canonicalURL: URL) async throws -> ImporterResults? {
ImporterResults(my_extras_stylesheet)
}
}
let customFunctions: SassFunctionMap = [
"userColorForScore($score)" : { args in
let score = try args[0].asInt()
return SassColor(...)
}
]
let results = try await compiler.compile(
fileURL: scssFileURL,
importers: [
.loadPath(sassIncludeDirectoryFileURL),
.importer(ExtrasImporter())
],
functions: customFunctions
)
// stylesheet
@use "extras";
.score-mid {
color: userColorForScore(50);
}
DartSass
构建于 NIO 之上,但用户界面完全是 Swift 5.5 async-await。
仅通过 Swift Package Manager,通过 Xcode 或直接安装
软件包依赖
.package(name: "swift-sass",
url: "https://github.com/johnfairh/swift-sass.git",
from: "3.1.0")
目标依赖
.product(name: "DartSass", package: "swift-sass"),
Swift 软件包为 macOS 和 Linux(特别是 Ubuntu Focal/20.04 64 位)捆绑了 Dart Sass 编译器,包括 x86_64 和 arm64。 构建时会选择正确的二进制文件。 但是,选择是基于主机架构进行的,因此如果您想进行交叉编译,则需要手动组装结果。
对于其他平台,您需要从 发布页面下载正确的版本,或者手动构建它,并将其作为程序分发的一部分进行发布,并使用 此初始化器。
作为此过程的一部分,不需要安装 Dart 运行时或 SDK,dart-sass-embedded
程序是独立的。 所需的版本显示在 VERSION_DART_SASS 文件中。
LibSass 是 Sass 的 C++ 实现。 近年来,它已经落后于规范和参考实现,并在 2020 年被弃用。 然而,目前正在进行复兴该项目的工作,并且 LibSass 4 或 libsass-ng 可能会作为替代的 Sass 实现出现,并具有与 Dart Sass 相同级别的语言支持。 截至 2024 年夏季,这种复兴的努力正在显示出复苏的迹象,但我仍然不抱太大希望。
有关当前开发状态,请参阅实验性的 libsass4 分支:如果 LibSass 本身设法发布,那么此软件包将支持它作为替代集成。
欢迎: 提交 issue / johnfairh@gmail.com / @johnfairh@mastodon.social
根据 MIT 许可证分发。