41 个版本
| 0.13.4 | 2024 年 8 月 4 日 |
|---|---|
| 0.13.3 | 2024 年 5 月 19 日 |
| 0.13.2 | 2024 年 2 月 7 日 |
| 0.13.1 | 2023 年 7 月 17 日 |
| 0.4.0 | 2020 年 3 月 21 日 |
#77 in 网络编程
15,188 每月下载次数
用于 38 个 Crates (26 直接)
1MB
23K SLoC
grass
这个 crate 的目标是提供一种高级接口,将 Sass 编译成纯 CSS。它提供了一个非常有限的 API,目前仅公开了 2 个函数。
除了库之外,此 crate 还包括一个二进制文件,旨在作为 Sass 命令行可执行程序的隐形替代品。
此 crate 的目标是实现与 dart-sass 参考实现完全的功能对等。除错误信息和错误范围外,对 dart-sass 实现的任何偏差都可以视为一个错误。
状态
grass 已达到一个阶段,人们可以对其输出相当有信心。对于普通用户来说,与 dart-sass 之间不应该有可察觉的差异。
grass 的每个提交都与 bootstrap v5.0.2 进行了测试,并且每个版本都与 bootstrap 的 main 分支的最后 2,500 个提交进行了测试。
尽管如此,还有一些已知的功能缺失和错误。grass 的粗糙边缘主要包括 @forward 和 @use 的更复杂使用。我们支持这些规则的基本用法,但如 @import 包含 @forward 并带有前缀的模块等更高级功能可能不会按预期行为。
所有已知的功能缺失和错误都记录在 #19。
grass 不是一个 libsass 的直接替代品,也没有这个打算。如果您从 libsass 升级到 grass,您可能需要修改您的样式表,尽管这些更改应该与升级到 dart-sass 需要的更改相同。
性能
grass 在与 dart-sass 和 sassc (libsass) 进行基准测试时,结果如下 [点击查看](https://github.com/connorskees/sass-perf)。一般来说,grass 的速度比 dart-sass 快约 2 倍,比 sassc 快约 1.7 倍。
Cargo 特性
commandline
(默认启用): 使用 clap 构建二进制文件
random
(默认启用): 启用内置函数 random([$limit]) 和 unique-id()
macro
(默认禁用): 启用宏 grass::include! 以在编译时将 Sass 编译成 CSS
nightly
(默认禁用): 目前仅由 grass::include! 使用以启用 proc_macro::tracked_path
测试
尽可能让这个库遵循与 rust-analyzer 相同的测试哲学 [点击查看](https://internals.rust-lang.org/t/experience-report-contributing-to-rust-lang-rust/12012/17)。也就是说,只需运行 cargo test 即可运行所有测试。这个库维护了一个独立的测试套件,尽管它也包含了一些原生的测试用例。这样做的好处是可以在没有 Ruby 的情况下运行测试,同时也使得测试比官方规范更细粒度。
话虽如此,要运行官方测试套件,
# This script expects node >=v14.14.0. Check version with `node --version`
git clone https://github.com/connorskees/grass --recursive
cd grass && cargo b --release
cd sass-spec && npm install
npm run sass-spec -- --impl=dart-sass --command '../target/release/grass'
规范运行器在 Windows 上无法工作。
使用修改后的规范运行器,该运行器忽略警告和错误范围(但包括错误消息),grass 实现了以下结果
2023-07-09
PASSING: 6230
FAILING: 545
TOTAL: 6905
大多数失败的测试都是纯粹的美学问题,涉及展开模式中注释周围的空白或错误消息。
版本控制
grass 的最低支持 Rust 版本 (MSRV) 是 1.70.0。MSRV 的提高将与次要版本号的提升相对应。当前的 MSRV 不是一个硬性最低要求,但 grass 未来修复版本不一定能在之前的版本上工作。
grass 目前针对 dart-sass 版本 1.54.3。该数字的增加将与次要或修复版本号的提升相对应,具体取决于更改。
依赖关系
~2.6–4MB
~66K SLoC