☰
Vite与Tailwind CSS前端开发最佳实践指南
2026/10/26 20:52:01 网站建设 项目流程

1. 为什么选择Vite+Tailwind组合?

现代前端开发对构建速度和开发体验的要求越来越高。Vite作为新一代前端构建工具,凭借其原生ESM支持和闪电般的冷启动速度,正在快速取代Webpack成为开发者的首选。而Tailwind CSS作为实用优先的CSS框架,通过组合原子类的方式彻底改变了我们编写样式的方法。

这个组合的优势在于:

  • 开发体验:Vite的即时热更新(HMR)速度极快,搭配Tailwind的实用类即时生效特性,实现真正的"所见即所得"
  • 性能表现:Vite在生产构建时使用Rollup,生成的代码更精简;Tailwind通过PurgeCSS自动移除未使用的样式
  • 维护成本:不需要维护复杂的Webpack配置,Tailwind也避免了传统CSS的命名冲突问题

提示:如果你的项目需要兼容IE11等老旧浏览器,需要额外配置PostCSS和autoprefixer,这在后续章节会详细说明

2. 环境准备与项目创建

2.1 系统环境检查

在开始之前,请确保你的开发环境满足以下要求:

  • Node.js版本 ≥14.18.0(推荐使用16.x LTS版本)
  • npm ≥6.x 或 yarn ≥1.22(推荐使用pnpm,速度更快)
  • 代码编辑器(VS Code + Tailwind CSS IntelliSense插件体验最佳)

可以通过以下命令检查当前环境:

node -v npm -v

2.2 创建Vite项目

使用Vite官方脚手架快速初始化项目:

npm create vite@latest my-tailwind-app --template vue # 或使用yarn yarn create vite my-tailwind-app --template vue # 或使用pnpm pnpm create vite my-tailwind-app --template vue

模板选择建议:

  • Vue项目选择vue或vue-ts
  • React项目选择react或react-ts
  • 纯HTML/CSS/JS项目选择vanilla

创建完成后进入项目目录并安装基础依赖:

cd my-tailwind-app npm install

3. Tailwind CSS安装与配置

3.1 安装Tailwind及其依赖

通过npm安装Tailwind CSS及其必要依赖:

npm install -D tailwindcss postcss autoprefixer

然后初始化Tailwind配置文件:

npx tailwindcss init

这会在项目根目录生成两个重要文件:

  • tailwind.config.js- Tailwind的主配置文件
  • postcss.config.js- PostCSS的配置文件(如果不存在会自动创建)

3.2 配置Tailwind

修改tailwind.config.js以包含项目中的所有模板文件路径:

module.exports = { content: [ "./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}", ], theme: { extend: {}, }, plugins: [], }

对于Vue项目,特别注意要包含.vue文件;React项目则需要包含.jsx/.tsx文件。

3.3 引入Tailwind样式

在项目的CSS入口文件(通常是src/style.css或src/index.css)中添加Tailwind指令:

@tailwind base; @tailwind components; @tailwind utilities;

如果使用Vue单文件组件,确保在main.js或main.ts中导入这个CSS文件:

import './style.css'

4. 开发环境优化

4.1 配置VS Code插件

为了获得最佳的开发体验,建议安装以下VS Code插件:

  • Tailwind CSS IntelliSense- 提供自动完成、语法高亮和 linting
  • PostCSS Language Support- 更好的CSS支持
  • Volar(Vue项目) 或ES7+ React/Redux/React-Native snippets(React项目)

在项目根目录创建.vscode/settings.json以启用Tailwind提示:

{ "editor.quickSuggestions": { "strings": true }, "tailwindCSS.includeLanguages": { "vue": "html", "javascript": "javascriptreact" } }

4.2 优化HMR体验

Vite默认已经配置了热模块替换,但我们可以针对Tailwind做一些优化。在vite.config.js中添加:

export default defineConfig({ server: { watch: { usePolling: true, // 对Docker/WSL2环境特别有用 } } })

5. 生产环境构建优化

5.1 配置PurgeCSS

Tailwind CSS在生产环境下会自动移除未使用的样式,但我们需要确保配置正确。在tailwind.config.js中:

module.exports = { purge: { enabled: process.env.NODE_ENV === 'production', content: [ './src/**/*.html', './src/**/*.vue', './src/**/*.jsx', // 其他模板文件路径 ], options: { safelist: ['bg-red-500', 'px-4'], // 强制保留的类名 } } }

5.2 兼容旧版浏览器

如果需要支持旧版浏览器(如IE11),需要修改postcss.config.js:

module.exports = { plugins: { tailwindcss: {}, autoprefixer: { overrideBrowserslist: [ '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9' ], }, }, }

然后在vite.config.js中设置构建目标:

export default defineConfig({ build: { target: ['es2015', 'edge88', 'firefox78', 'chrome87', 'safari12'] } })

6. 常见问题与解决方案

6.1 样式不生效

症状:Tailwind类名应用了但没有效果

排查步骤:

  1. 检查tailwind.config.js中的content配置是否包含你的模板文件
  2. 确保CSS文件中正确引入了三个Tailwind指令
  3. 检查构建过程中是否有PostCSS相关的错误
  4. 尝试重启开发服务器

6.2 生产环境样式丢失

症状:开发环境正常,但生产构建后缺少样式

解决方案:

  1. 检查PurgeCSS配置,确保没有过度清除
  2. 在safelist中添加必要的类名
  3. 使用@layer指令保护自定义样式:
@layer components { .btn-primary { @apply py-2 px-4 bg-blue-500 text-white; } }

6.3 与其他CSS库冲突

症状:Tailwind样式被其他CSS库覆盖

解决方案:

  1. 在tailwind.config.js中配置important选项:
module.exports = { important: '#app', // 使用ID选择器提高特异性 }
  1. 或使用@layer和@apply重构冲突的样式

7. 高级配置技巧

7.1 自定义主题

在tailwind.config.js中扩展默认主题:

module.exports = { theme: { extend: { colors: { primary: { DEFAULT: '#3B82F6', light: '#93C5FD', dark: '#1D4ED8' } }, spacing: { 128: '32rem', } } } }

7.2 使用插件扩展功能

安装官方插件增强Tailwind功能:

npm install -D @tailwindcss/forms @tailwindcss/typography @tailwindcss/line-clamp

然后在配置中启用:

module.exports = { plugins: [ require('@tailwindcss/forms'), require('@tailwindcss/typography'), require('@tailwindcss/line-clamp'), ] }

7.3 JIT模式优化

Tailwind v3.0+默认使用JIT(Just-In-Time)模式,但我们可以进一步优化:

module.exports = { mode: 'jit', purge: [ // 模板文件路径 ], // 其他配置... }

8. 性能优化实践

8.1 分析构建产物

使用rollup-plugin-visualizer分析包大小:

npm install -D rollup-plugin-visualizer

然后在vite.config.js中配置:

import { visualizer } from 'rollup-plugin-visualizer' export default defineConfig({ plugins: [ visualizer() ] })

构建后会生成stats.html,可以直观查看各模块大小。

8.2 按需引入第三方库

对于组件库如Element Plus,配置按需导入:

import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' export default defineConfig({ plugins: [ AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ] })

8.3 图片优化

使用vite-plugin-image-optimizer自动优化图片:

npm install -D vite-plugin-image-optimizer

配置示例:

import { imageOptimizer } from 'vite-plugin-image-optimizer' export default defineConfig({ plugins: [ imageOptimizer({ jpg: { quality: 80, }, png: { quality: 80, }, }) ] })

9. 项目结构最佳实践

推荐的项目结构组织方式:

my-tailwind-app/ ├── src/ │ ├── assets/ │ │ ├── styles/ # 全局样式 │ │ └── images/ # 图片资源 │ ├── components/ # 公共组件 │ │ └── Button.vue # 使用Tailwind的组件示例 │ ├── composables/ # Vue组合式API │ ├── layouts/ # 布局组件 │ ├── pages/ # 页面组件 │ ├── stores/ # 状态管理 │ ├── utils/ # 工具函数 │ ├── App.vue # 根组件 │ └── main.js # 应用入口 ├── tailwind.config.js # Tailwind配置 ├── postcss.config.js # PostCSS配置 └── vite.config.js # Vite配置

典型组件示例(Button.vue):

<template> <button class="px-4 py-2 rounded-md bg-blue-600 text-white hover:bg-blue-700 transition-colors" @click="$emit('click')" > <slot /> </button> </template>

10. 部署注意事项

10.1 静态资源路径问题

如果项目部署在子路径下,需要配置base选项:

export default defineConfig({ base: '/sub-path/' })

10.2 404重定向

对于单页应用,大多数服务器需要配置将所有请求重定向到index.html。以Nginx为例:

location / { try_files $uri $uri/ /index.html; }

10.3 压缩静态资源

推荐在服务器层面启用gzip/brotli压缩。对于Nginx:

gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

11. 测试与验证

11.1 视觉回归测试

使用Storybook + Loki进行视觉回归测试:

npx sb init npm install -D loki

配置.storybook/main.js:

module.exports = { stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-interactions' ], framework: '@storybook/vue3', core: { builder: '@storybook/builder-vite' } }

11.2 端到端测试

使用Cypress进行端到端测试:

npm install -D cypress

在cypress/support/commands.js中添加自定义命令:

Cypress.Commands.add('checkTailwindClass', (selector, className) => { cy.get(selector).should('have.class', className) })

12. 持续集成配置

12.1 GitHub Actions示例

创建.github/workflows/ci.yml:

name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '16' - run: npm ci - run: npm run build - run: npm run test

12.2 Docker化部署

创建Dockerfile:

FROM node:16-alpine as builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

配套的nginx.conf:

server { listen 80; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } }

13. 迁移现有项目

13.1 从Webpack迁移

  1. 备份现有webpack.config.js
  2. 安装Vite:
npm install -D vite
  1. 创建vite.config.js,参考Vite文档转换Webpack配置
  2. 将index.html移到项目根目录,更新资源路径
  3. 替换process.env为import.meta.env
  4. 更新package.json脚本:
{ "scripts": { "dev": "vite", "build": "vite build", "serve": "vite preview" } }

13.2 从其他CSS框架迁移

Bootstrap迁移步骤:

  1. 识别项目中使用的Bootstrap组件
  2. 使用@apply指令转换核心样式:
.btn-primary { @apply py-2 px-4 bg-blue-600 text-white rounded hover:bg-blue-700; }
  1. 逐步替换布局类(如row/col)为Tailwind的flex和grid
  2. 使用@tailwindcss/forms插件替代表单样式

14. 主题切换实现

14.1 暗黑模式配置

在tailwind.config.js中启用暗黑模式:

module.exports = { darkMode: 'class', // 或 'media' // ... }

使用示例:

<html class="dark"> <body class="bg-white dark:bg-gray-900"> <button class="bg-blue-500 dark:bg-blue-800">Toggle</button> </body> </html>

14.2 动态主题切换

创建主题切换组件:

<template> <button @click="toggleTheme"> {{ darkMode ? 'Light' : 'Dark' }} Mode </button> </template> <script setup> import { ref, onMounted } from 'vue' const darkMode = ref(false) const toggleTheme = () => { darkMode.value = !darkMode.value document.documentElement.classList.toggle('dark', darkMode.value) localStorage.setItem('darkMode', darkMode.value) } onMounted(() => { darkMode.value = localStorage.getItem('darkMode') === 'true' document.documentElement.classList.toggle('dark', darkMode.value) }) </script>

15. 性能监控与分析

15.1 使用Lighthouse

在Chrome DevTools中运行Lighthouse审计,或通过命令行:

npm install -D lighthouse npx lighthouse http://localhost:3000 --view

15.2 真实用户监控

集成Sentry监控前端错误:

npm install @sentry/vue @sentry/tracing

配置示例:

import * as Sentry from "@sentry/vue" import { Integrations } from "@sentry/tracing" const app = createApp(App) Sentry.init({ app, dsn: "your-dsn-here", integrations: [ new Integrations.BrowserTracing({ routingInstrumentation: Sentry.vueRouterInstrumentation(router), tracingOrigins: ["localhost", "your-domain.com"], }), ], tracesSampleRate: 1.0, })

16. 移动端适配策略

16.1 响应式设计

Tailwind默认提供5个断点:

  • sm: 640px
  • md: 768px
  • lg: 1024px
  • xl: 1280px
  • 2xl: 1536px

使用示例:

<div class="text-sm md:text-base lg:text-lg"> 响应式文字大小 </div>

16.2 触摸反馈优化

为移动设备添加触摸反馈:

<button class="active:scale-95 transform transition-transform"> 点击我 </button>

16.3 防止布局偏移

为图片和媒体元素预留空间:

<img src="image.jpg" class="w-full aspect-video bg-gray-100" loading="lazy" >

17. 无障碍访问优化

17.1 语义化HTML

确保使用正确的HTML标签:

<button class="..." aria-label="关闭"> &times; </button>

17.2 焦点样式

自定义焦点样式确保可见:

@layer components { .focusable { @apply focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2; } }

17.3 颜色对比度

使用Tailwind提供的对比色工具类:

<p class="text-gray-900 bg-gray-100">良好对比度</p>

18. 微交互增强

18.1 动画效果

使用Tailwind的动画工具类:

<button class="hover:animate-pulse">悬停脉冲效果</button>

18.2 过渡效果

平滑的状态过渡:

<div class="transition-all duration-300 hover:scale-105"> 悬停放大 </div>

18.3 骨架屏

加载状态占位:

<div class="animate-pulse flex space-x-4"> <div class="rounded-full bg-gray-200 h-10 w-10"></div> <div class="flex-1 space-y-2"> <div class="h-4 bg-gray-200 rounded"></div> <div class="h-4 bg-gray-200 rounded w-5/6"></div> </div> </div>

19. 状态管理集成

19.1 Pinia集成

安装Pinia:

npm install pinia

配置示例:

import { createPinia } from 'pinia' const app = createApp(App) app.use(createPinia())

定义store:

import { defineStore } from 'pinia' export const useUIStore = defineStore('ui', { state: () => ({ darkMode: false, }), actions: { toggleDarkMode() { this.darkMode = !this.darkMode document.documentElement.classList.toggle('dark', this.darkMode) } } })

19.2 使用Store管理UI状态

组件中使用:

<script setup> import { useUIStore } from '@/stores/ui' const ui = useUIStore() </script> <template> <button @click="ui.toggleDarkMode"> {{ ui.darkMode ? 'Light' : 'Dark' }} Mode </button> </template>

20. 国际化支持

20.1 安装vue-i18n

npm install vue-i18n

20.2 配置多语言

创建语言文件:

// locales/en.js export default { buttons: { submit: 'Submit', cancel: 'Cancel' } } // locales/zh.js export default { buttons: { submit: '提交', cancel: '取消' } }

初始化i18n:

import { createI18n } from 'vue-i18n' import en from './locales/en' import zh from './locales/zh' const i18n = createI18n({ locale: 'en', messages: { en, zh } }) app.use(i18n)

20.3 在组件中使用

<template> <button class="..."> {{ $t('buttons.submit') }} </button> </template>

21. 测试覆盖率保障

21.1 单元测试配置

使用Vitest进行单元测试:

npm install -D vitest @vue/test-utils jsdom

配置vite.config.js:

/// <reference types="vitest" /> export default defineConfig({ test: { environment: 'jsdom', globals: true, } })

21.2 组件测试示例

测试Tailwind组件:

import { mount } from '@vue/test-utils' import Button from './Button.vue' test('renders with Tailwind classes', () => { const wrapper = mount(Button, { slots: { default: 'Click me' } }) expect(wrapper.classes()).toContain('bg-blue-600') expect(wrapper.text()).toBe('Click me') })

22. 文档与团队协作

22.1 样式文档生成

使用Storybook记录组件:

npx sb init

配置Tailwind支持:

// .storybook/preview.js import '../src/style.css' export const parameters = { actions: { argTypesRegex: "^on[A-Z].*" }, controls: { matchers: { color: /(background|color)$/i, date: /Date$/, }, }, }

22.2 设计系统集成

使用Figma Tokens插件同步设计变量:

  1. 安装Figma Tokens插件
  2. 导出设计变量为JSON
  3. 在tailwind.config.js中导入:
const colors = require('./design-tokens/colors.json') module.exports = { theme: { colors: { ...colors, // 扩展其他颜色 } } }

23. 升级与维护

23.1 依赖更新策略

使用npm-check-updates检查更新:

npm install -g npm-check-updates ncu -u npm install

23.2 版本锁定建议

推荐在package.json中使用精确版本:

{ "devDependencies": { "tailwindcss": "3.1.8", "vite": "3.0.7" } }

23.3 破坏性变更处理

创建升级检查清单:

  1. 查看框架更新日志
  2. 在开发分支测试升级
  3. 使用codemod工具自动迁移(如tailwindcss-upgrader)
  4. 更新项目文档

24. 社区资源推荐

24.1 学习资源

  • 官方文档:
    • Vite文档
    • Tailwind CSS文档
  • 视频教程:
    • Vite + Tailwind速成课程
    • 高级主题定制教程

24.2 实用工具

  • Tailwind Play - 在线Tailwind编辑器
  • Vite Visualizer - 分析构建产物
  • Headless UI - 无样式UI组件库

24.3 UI库推荐

  • DaisyUI - Tailwind组件库
  • Flowbite - 基于Tailwind的UI套件
  • Tailwind Elements - Bootstrap风格的组件

25. 项目模板推荐

25.1 官方模板

Vite官方提供了多个预设模板:

npm create vite@latest my-project --template vue-ts

可用模板包括:

  • vanilla,vanilla-ts
  • vue,vue-ts
  • react,react-ts
  • preact,preact-ts
  • lit,lit-ts
  • svelte,svelte-ts

25.2 社区模板

一些优秀的社区模板:

  • vitesse- Vue3全栈模板
  • vite-react-tailwind-starter- React + Tailwind起手式
  • vite-electron-builder- 桌面应用模板

安装示例:

npx degit user/repo my-project cd my-project npm install

26. 调试技巧

26.1 开发工具配置

Chrome开发者工具技巧:

  1. 使用"Toggle Element State"测试hover/focus状态
  2. 在Styles面板过滤Tailwind类名
  3. 使用"Force Element State"测试暗黑模式

26.2 源码映射

确保Vite生成正确的sourcemap:

export default defineConfig({ build: { sourcemap: true, } })

26.3 性能分析

使用Chrome Performance面板:

  1. 录制页面加载过程
  2. 分析JavaScript执行时间
  3. 识别重绘和回流问题

27. 安全最佳实践

27.1 依赖安全

定期检查漏洞:

npm audit

使用snyk进行深度扫描:

npx snyk test

27.2 内容安全策略

配置CSP头:

export default defineConfig({ server: { headers: { "Content-Security-Policy": "default-src 'self'" } } })

27.3 环境变量保护

永远不要在前端暴露敏感信息:

// 错误示例 const apiKey = import.meta.env.VITE_API_KEY // 正确做法 - 通过后端接口中转

28. 渐进式Web应用支持

28.1 安装PWA插件

npm install -D vite-plugin-pwa

28.2 配置示例

import { VitePWA } from 'vite-plugin-pwa' export default defineConfig({ plugins: [ VitePWA({ registerType: 'autoUpdate', manifest: { name: 'My App', short_name: 'App', theme_color: '#ffffff', icons: [ { src: '/pwa-192x192.png', sizes: '192x192', type: 'image/png' } ] } }) ] })

28.3 离线缓存策略

自定义workbox配置:

VitePWA({ workbox: { runtimeCaching: [ { urlPattern: /^https:\/\/api\.example\.com\/.*/i, handler: 'NetworkFirst', options: { cacheName: 'api-cache', expiration: { maxEntries: 10, maxAgeSeconds: 60 * 60 * 24 } } } ] } })

29. 服务端渲染配置

29.1 Vite SSR基础

创建简单的SSR配置:

// server.js import { createServer } from 'vite' const server = await createServer({ server: { middlewareMode: 'ssr' } }) app.use('*', async (req, res) => { const url = req.originalUrl const template = await server.transformIndexHtml(url) const { render } = await server.ssrLoadModule('/src/entry-server.js') const appHtml = await render(url) res.status(200).set({ 'Content-Type': 'text/html' }).end(template.replace('<!--app-html-->', appHtml)) })

29.2 Tailwind SSR注意事项

确保Tailwind在SSR中正常工作:

  1. 禁用JIT模式或确保所有类名都在初始渲染中出现
  2. 使用@tailwindcss/jit插件处理动态类名
  3. 在构建时预渲染关键CSS

30. 微前端集成

30.1 作为微应用集成

配置Vite构建:

export default defineConfig({ build: { lib: { entry: 'src/main.js', name: 'myApp', formats: ['umd'] } } })

30.2 使用模块联邦

安装@originjs/vite-plugin-federation:

npm install @originjs/vite-plugin-federation -D

配置示例:

import { createVuePlugin } from 'vite-plugin-vue2' import { viteStaticCopy } from 'vite-plugin-static-copy' import { federation } from '@originjs/vite-plugin-federation' export default { plugins: [ federation({ name: 'host-app', remotes: { remote_app: 'http://localhost:5001/assets/remoteEntry.js' }, shared: ['vue'] }) ] }

31. 性能基准测试

31.1 构建速度测试

比较不同工具的构建时间:

# Vite time npm run build # Webpack time webpack --mode production

31.2 运行时性能

使用WebPageTest进行测试:

  1. 设置3G网络节流
  2. 测试首次内容绘制(FCP)
  3. 比较CSS和JS文件大小

31.3 内存分析

使用Chrome DevTools Memory面板:

  1. 拍摄堆快照
  2. 比较组件挂载前后的内存变化
  3. 识别内存泄漏

32. 自定义插件开发

32.1 创建Vite插件

简单插件示例:

export default function myPlugin() { return { name: 'transform-file', transform(code, id) { if (id.endsWith('.custom')) { return `export default ${JSON.stringify(code)}` } } } }

32.2 Tailwind插件开发

扩展Tailwind功能:

// tailwind.config.js const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addUtilities }) { addUtilities({ '.rotate-y-180': { transform: 'rotateY(180deg)', }, }) }) ] }

33. 设计工作流优化

33.1 Figma集成

使用Tailwind CSS Figma插件:

  1. 安装Figma插件
  2. 同步颜色和间距变量
  3. 生成设计令牌

33.2 设计到代码

工具推荐:

  • Anima- Figma转Vue组件
  • Storybook- 设计系统文档
  • Zeroheight- 设计系统协作

34. 多项目管理

34.1 Monorepo配置

使用pnpm workspace:

packages/ app/ vite.config.js ui/ tailwind.config.js pnpm-workspace.yaml

34.2 共享配置

提取公共Tailwind配置:

// packages/config/tailwind-preset.js module.exports = { theme: { // 共享主题配置 } } // 子项目中使用 module.exports = { presets: [require('../config/tailwind-preset')] }

35. 高级优化技巧

35.1 关键CSS提取

使用critters插件:

npm install -D vite-plugin-critters

配置示例:

import critters from 'vite-plugin-critters' export default defineConfig({ plugins: [ critters({ preload: 'swap', inlineThreshold: 0 }) ] })

35.2 字体优化

使用fontsource自托管字体:

npm install @fontsource/inter

在CSS中引入:

@import '@fontsource/inter/variable.css';

配置Tailwind:

module.exports = { theme: { fontFamily: { sans: ['Inter var', 'sans-serif'], }, } }

36. 错误处理与监控

36.1 全局错误处理

Vue3错误处理器:

app.config.errorHandler = (err, instance, info) => { console.error('Vue error:', err) // 发送到错误监控服务 }

36.2 组件错误边界

创建ErrorBoundary组件:

<template> <slot v-if="!hasError" /> <div v-else class="bg-red-50 p-4"> 组件渲染错误 </div> </template> <script setup> import { ref, onErrorCaptured } from 'vue' const hasError = ref(false) onErrorCaptured((err) => { hasError.value = true return false // 阻止错误继续向上传播 }) </script>

37. 代码分割策略

37.1 路由级分割

Vue Router配置:

const routes = [ { path: '/about', component: () => import('./views/About.vue') } ]

37.2 组件级分割

使用defineAsyncComponent:

<script setup> import { defineAsyncComponent } from 'vue' const AsyncComponent = defineAsyncComponent(() => import('./components/HeavyComponent.vue') ) </script> <template> <AsyncComponent /> </template>

37.3 库分割

手动分割大依赖:

export default defineConfig({ build: { rollupOptions: { output: { manualChunks: { lodash: ['lodash'], chartjs: ['chart.js'], } } } } })

38. 类型安全增强

38.1 TypeScript配置

推荐tsconfig.json:

{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "strict": true, "jsx": "preserve", "moduleResolution": "node", "esModuleInterop": true, "skipLibCheck": true, "forceCons

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询