unocss默认变慢是因为未配置content.exclude导致扫描node_modules等无关文件,引发冗余匹配;需显式设置include仅扫描源码路径,并启用minify合并重复选择器。

UnoCSS 不是“装了就能快”的工具,它默认反而更慢——除非你明确告诉它只扫哪些文件、怎么转类名、哪些规则可以跳过匹配。
为什么 UnoCSS 在 UniApp 里一启动就卡顿?
根本原因是默认扫描整个项目目录,包括 node_modules 里成千上万个 JS/TS 文件。这些文件里大量存在类似 class="text-lg" 的字符串(比如注释、测试用例、第三方源码),UnoCSS 全部尝试正则匹配,CPU 和内存直接拉满。
-
content.exclude不会自动生效,必须显式写成['node_modules']或[/node_modules\//],别写成./node_modules - 更推荐用
content.include做排他性扫描:['src/**/*.{vue,ts,tsx,html}'],避免宽泛的**/*.ts拉入无样式文件 - 如果项目含
packages/多包结构,得逐个列:['packages/*/src/**/*.{vue,ts}']
微信小程序中 class="bg-red-500" 直接报错?
小程序不支持 :、- 等字符出现在 class 名里,原生 UnoCSS 规则会直接失效。必须用 unocss-preset-weapp 提供的转换器。
- 安装后在
unocss.config.ts中启用:presetWeapp({ platform: 'uniapp' }) - 类名会被自动转义:
hover:bg-blue-500→hover__bg-blue-500(注意双下划线) - 若需属性化写法(如
bg="red-500"),要额外引入presetWeappAttributify()并配transformerAttributify() - VS Code 插件补全依赖
separators: '__'配置,否则提示不生效
动态拼接 class 时样式丢失怎么办?
UnoCSS 默认只解析静态字符串,遇到 class="${type}-primary" 或 className.split(' ').join(' ') 就无法识别,对应 CSS 不会生成。
- 不能靠
rules硬编码覆盖,必须用safelist提前声明可能的组合:['btn-primary', 'btn-danger', 'text-sm', 'text-lg'] - 若使用
v-bind绑定对象,确保 key 是字面量(如{ 'px-4': true }),避免运行时计算 key - 多平台项目(如同时跑 H5 + 小程序)需分开配置
safelist,小程序端要过滤掉非法字符变体
构建体积没变小?检查重复选择器和 minify 是否开启
重复类名(如多个组件都用了 md:flex)本身不影响运行时,但会让 UnoCSS 反复生成相同 CSS 规则,增大最终文件体积、拖慢构建。
- 启用
minify: true(Vite 插件默认已开),自动合并重复选择器 - 避免在不同预设中定义相同功能的规则(例如
preset-wind和自定义rules同时提供flex) - 检查
unocss.wxss或style.css输出文件,搜索flex看是否出现多次
最常被忽略的是:UnoCSS 的“按需”只对静态可分析的类名有效;一旦涉及运行时拼接、条件编译或跨平台差异,就必须靠 safelist 和平台专属预设兜底——这不是配置问题,是原子化 CSS 在小程序生态里的天然边界。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











