UnoCSS引擎调研

Daotin 2023-07-10 编辑

目前痛点

  1. 之前的版本体验差。项目使用 tailwindcss,由于 tailwind 在v2.1+之后才支持JIT模式,所有很多随意的宽度(比如w-123)啥的不支持,要么在全局样式中的某个位置添加这样一个工具类,要么只能在tailwind.config.js 去定义,但是你又不能穷举所有的数字。
  2. 本地开发会比较慢。tailwind 的PurgeCSS这个清除操作仅在生成构建下有效,而开发环境下仍要使用包含了所有规则巨大的 CSS 文件。这在 Webpack 中表现可能并不明显,但在 Vite 中却有着巨大的影响,毕竟其他内容的加载都非常迅捷。
  3. 性能不是太好。从内部实现上看,Tailwind 依赖于 PostCSS 的 AST 进行修改,并且 Tailwind JIT 依赖于对文件系统的预扫描,并使用文件系统监听器来实现 HMR。文件 I/O 不可避免地会引入开销,而你的构建工具实际上需要再次加载它们。
  4. WindiCSS 已不再维护

UnoCSS 介绍

虽然目前 Tailwind 还不错,但是 UnoCSS 有更大的优势:

  • 直观且完全可定制。像 Tailwind 的一些约定是内置的,你不能随意修改
  • 预设功能。通过预设功能,可以直接支持 Tailwind/WindiCSS…的写法;并且可以共享给他人你的自定义预设。
  • 跳过解析,不使用 AST。性能更好。
  • 其他优势:
    • 纯 CSS 图标
    • 可变修饰 (Variants)
    • 属性化模式 (Attributify Mode)
    • CSS 作用域
    • Shortcuts:多个原子合成一个
    • 网络字体

是否使用

新项目直接使用 UnoCSS,使用 tailwind 预设,可以直接上手。

老项目的话,tailwind 目前还不是瓶颈,需要的功能都有,暂不需要更新。