Files
Native-Router-Vue/vite.config.ts
2026-07-21 15:03:34 +10:00

56 lines
2.1 KiB
TypeScript

import path from 'node:path'
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
import vue from '@vitejs/plugin-vue'
import { VitePWA } from 'vite-plugin-pwa'
export default defineConfig({
base: './',
root: path.resolve(__dirname, 'apps/demo'),
publicDir: path.resolve(__dirname, 'public'),
plugins: [
vue(),
tailwindcss(),
VitePWA({
registerType: 'prompt',
includeAssets: ['favicon.svg', 'app-icon.svg', 'apple-touch-icon.png', 'pwa-192.png', 'pwa-512.png'],
manifest: {
id: '/',
name: 'Native Vue Messenger',
short_name: 'NVR Messenger',
description: 'Gesture-first navigation for Vue applications',
theme_color: '#0b0d12',
background_color: '#0b0d12',
display: 'standalone',
scope: '/',
orientation: 'any',
start_url: '/',
icons: [
{ src: '/pwa-192.png', sizes: '192x192', type: 'image/png', purpose: 'any' },
{ src: '/pwa-512.png', sizes: '512x512', type: 'image/png', purpose: 'any' },
{ src: '/pwa-512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' },
{ src: '/app-icon.svg', sizes: 'any', type: 'image/svg+xml', purpose: 'any' },
],
},
workbox: {
cleanupOutdatedCaches: true,
navigateFallback: '/index.html',
globPatterns: ['**/*.{js,css,html,svg,png,woff2}'],
},
}),
],
resolve: {
alias: [
{ find: /^@\/(.*)$/, replacement: `${path.resolve(__dirname, 'apps/demo/src')}/$1` },
{ find: /^@native-vue-router\/core$/, replacement: path.resolve(__dirname, 'packages/core/src/index.ts') },
{ find: /^@native-vue-router\/preset-native$/, replacement: path.resolve(__dirname, 'packages/preset-native/src/index.ts') },
{ find: /^@native-vue-router\/capacitor$/, replacement: path.resolve(__dirname, 'packages/capacitor/src/index.ts') },
{ find: /^@native-vue-router\/electron$/, replacement: path.resolve(__dirname, 'packages/electron/src/index.ts') },
],
},
build: {
outDir: path.resolve(__dirname, 'apps/demo/dist'),
emptyOutDir: true,
},
})