最近在做一个 uni-app 商城小程序,尝试引入 Tailwind CSS,记录一下配置过程和使用感受。
背景
项目是一个标准的电商小程序:首页、商品列表、购物车、个人中心。之前写样式用的是 SCSS,每个页面都有对应的样式文件。
开发过程中遇到一些问题:
- 类名命名需要反复斟酌,同一个组件不同人写可能叫不同的名字
- 样式文件和组件文件分离,修改时需要来回切换
- 一些通用样式(间距、颜色、圆角)经常重复定义
之前做 Web 项目用过 Tailwind CSS,体验还不错。想看看小程序里能不能用,搜了一下找到了 weapp-tailwindcss 这个方案。
配置过程
1. 安装依赖
pnpm add -D tailwindcss@3 postcss autoprefixer weapp-tailwindcss
npx tailwindcss init
2. 配置 tailwind.config.js
module.exports = {
content: ['./src/**/*.{html,js,ts,jsx,tsx,vue}'],
corePlugins: { preflight: false }
}
3. 配置 vite.config.ts
import { UnifiedViteWeappTailwindcssPlugin as uvwt } from 'weapp-tailwindcss/vite'
export default defineConfig({
plugins: [uni(), uvwt()],
css: {
postcss: { plugins: [require('tailwindcss'), require('autoprefixer')] }
}
})
4. App.vue 引入样式
<style>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
5. 添加 postinstall 脚本
{
"scripts": { "postinstall": "weapp-tw patch" }
}
使用对比
使用任意值语法 [] 直接写 rpx,无需预配置。
遇到的问题
1. 动态 class 不生效
动态拼接的类名在生产环境会被 tree-shake 掉,需要使用完整类名。
2. 部分小程序组件样式限制
button、input 等原生组件有默认样式,需要用组件提供的特定属性覆盖。
优点
- 样式和结构写在一起,修改时不用切换文件
- 原子类有统一的命名规范,团队协作时风格一致
- 配置好后基本可用,不需要额外维护样式文件
注意点
- 需要熟悉 Tailwind 的类名,初期可能要查文档
- 动态 class 要注意 tree-shaking 问题
参考资源
- weapp-tailwindcss 文档: tw.icebreaker.top
- Tailwind CSS 官方文档: tailwindcss.com
- uni-app 官方文档: uniapp.dcloud.net.cn