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