import { fileURLToPath, URL } from 'node:url' import tailwindcss from '@tailwindcss/vite' import vue from '@vitejs/plugin-vue' import { VitePWA } from 'vite-plugin-pwa' import { defineConfig } from 'vitest/config' // https://vite.dev/config/ export default defineConfig({ plugins: [ vue(), tailwindcss(), VitePWA({ // prompt:由应用决定何时提示用户更新,避免刷新时打断正在编辑的操作 registerType: 'prompt', // 注册逻辑写在 PwaUpdatePrompt 组件里,不让插件自动注入 injectRegister: null, includeAssets: ['favicon.svg', 'apple-touch-icon.png'], manifest: { name: '看板 · 个人任务管理', short_name: '看板', description: '轻量的个人看板工具,数据保存在本机浏览器', lang: 'zh-CN', start_url: '/', scope: '/', display: 'standalone', background_color: '#f1f5f9', theme_color: '#0284c7', categories: ['productivity'], icons: [ { src: 'pwa-192x192.png', sizes: '192x192', type: 'image/png' }, { src: 'pwa-512x512.png', sizes: '512x512', type: 'image/png' }, { src: 'maskable-512x512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable', }, ], shortcuts: [ { name: '今日', short_name: '今日', description: '查看今天要做的事', url: '/today' }, ], }, workbox: { globPatterns: ['**/*.{js,css,html,svg,png,ico,webmanifest}'], // 前端路由:离线时任何路径都回落到 index.html navigateFallback: 'index.html', cleanupOutdatedCaches: true, clientsClaim: true, // 更新由用户确认后再生效 skipWaiting: false, }, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, test: { environment: 'jsdom', include: ['src/**/*.spec.ts'], coverage: { provider: 'v8', reporter: ['text'], include: ['src/**/*.{ts,vue}'], exclude: ['src/**/*.spec.ts', 'src/main.ts', 'src/types/**', 'src/router/**'], }, }, })