352 - 《Mako 开发日志(4):Less》
发布于 2023年10月12日
1、Mako 过程中有个分歧的点是 Less 怎么办?由于历史原因,我们有大量的 Less 项目,找一个没有 Less 的项目都很难。然后 Mako 支持 Less 有几种策略,1)不支持,遇到了通过 codemod 脚本修改 less 为 css,2)用 Rust 写一个 Lite Less,见 [[RFC:Less Lite]],3)用官方 less 包编译 less。前两个都尝试过,但最终向现实低头,为了能更快地推进项目落地,先选择了 3,缺点是会降低速度。
2、我们先是实现了一个 less2css。为了减少 diff,我们做了一些场景区分。1)大部分开发者 less 只是用了 css nesting 语法,而 css nesting 我们是内置支持的,这种场景只要把 .less 改成 .css 就好。2)探测到不支持的语法时,会用 lessc 编译一次用户的 less 文件生成 css 文件,并修改 import 他的地方。然后我们遇到一个跳不过的场景,就是 less 可能是间接依赖,比如用户先依赖 foo/index.js,然后 foo/index.js 依赖了 foo/index.less。
3、然后又设计了基于 Rust 的 Lite Less。一开始觉得大家用 Less 不会用太深,把 Less 的功能梳理了一