在 Vue 3 + TS + Vite + TSX 项目中配置 UnoCSS

在 Vue 3 + TS + Vite + TSX 项目中配置 UnoCSS

以下是给你的 Vue 3 + TypeScript + Vite + TSX 项目添加 UnoCSS 支持的完整步骤:

1. 安装 UnoCSS 及其相关依赖

bash 复制代码
npm install -D unocss @unocss/reset @unocss/vite

2. 配置 vite.config.ts

修改你的 vite.config.ts 文件:

typescript 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import UnoCSS from 'unocss/vite'

export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    UnoCSS(), // 添加 UnoCSS 插件
  ],
})

3. 创建 UnoCSS 配置文件

在项目根目录创建 uno.config.ts 文件:

typescript 复制代码
import { defineConfig, presetAttributify, presetUno, presetIcons } from 'unocss'

export default defineConfig({
  presets: [
    presetUno(), // 默认预设
    presetAttributify(), // 属性化模式支持
    presetIcons(), // 图标支持(可选)
  ],
  // 自定义规则
  rules: [
    ['m-1', { margin: '0.25rem' }],
    // 添加你的自定义规则...
  ],
  // 快捷方式
  shortcuts: {
    'btn': 'py-2 px-4 font-semibold rounded-lg shadow-md',
    'btn-green': 'text-white bg-green-500 hover:bg-green-700',
    // 添加你的快捷方式...
  },
  // 主题
  theme: {
    colors: {
      primary: 'var(--color-primary)',
      secondary: 'var(--color-secondary)',
      // 添加你的主题颜色...
    },
    fontFamily: {
        // 添加字体
      JetBrains: 'JetBrains',

    },
  }
})

4. 添加 UnoCSS 重置样式

在 main.ts 或 main.js 中导入 UnoCSS 重置样式:

typescript 复制代码
import '@unocss/reset/tailwind.css' // 可以使用其他重置样式,如 normalize.css
import 'uno.css'

5. 配置 TSX 支持 UnoCSS(可不配置)

确保你的 tsconfig.json 包含以下配置:

json 复制代码
{
  "compilerOptions": {
    "types": ["unocss/types/global"]
  }
}

6. 在组件中使用 UnoCSS

在 .vue 文件中使用:

vue 复制代码
<template>
  <div class="p-4 bg-blue-500 text-white rounded">
    UnoCSS in Vue SFC
  </div>
</template>

在 .tsx 文件中使用:

typescript 复制代码
import { defineComponent } from 'vue'

export default defineComponent({
  setup() {
    return () => (
      <div class="p-4 bg-red-500 text-white rounded">
        UnoCSS in TSX
      </div>
    )
  }
})

7. 可选:配置 VS Code 智能提示

安装 VS Code 的 UnoCSS 扩展

或者在项目根目录创建 .vscode/settings.json:

json 复制代码
{
  "unocss.root": ".",
  "unocss.include": [
    "**/*.vue",
    "**/*.ts",
    "**/*.tsx",
    "**/*.js",
    "**/*.jsx"
  ]
}

8. 运行项目

bash 复制代码
npm run dev

额外配置(按需选择)

图标支持

  1. 安装图标依赖:
bash 复制代码
npm install -D @iconify/json
  1. 在 uno.config.ts 中配置:
typescript 复制代码
import presetIcons from '@unocss/preset-icons'

export default defineConfig({
  presets: [
    presetIcons({
      scale: 1.2,
      warn: true,
      // 其他选项...
    }),
    // 其他预设...
  ]
})

动画支持

bash 复制代码
npm install -D @unocss/preset-wind

然后在 uno.config.ts 中使用 presetWind 替代 presetUno。

注意事项

  1. UnoCSS 的类名优先级可能与现有 CSS 冲突,可以通过调整 uno.config.ts 中的 layers 配置解决

  2. 生产构建时,UnoCSS 会自动提取使用的工具类,无需额外配置

  3. 如果遇到类名不生效的问题,检查文件是否被包含在扫描范围内

  4. 对于动态类名,可以使用 class 绑定或 class 属性(在 TSX 中)

现在你的项目已经完整支持 UnoCSS 了,可以在 Vue SFC 和 TSX 文件中使用原子化 CSS 工具类了!

相关推荐
卸任11 小时前
Vibe coding工具使用心得
前端·ai编程
brien912 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance12 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M12 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写12 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李12 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易13 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马13 小时前
前沿视界
前端
kyriewen13 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易13 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员