import { fileURLToPath, URL } from 'node:url'; import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; import vuetify from 'vite-plugin-vuetify'; import Layouts from 'vite-plugin-vue-layouts'; import DefineOptions from 'unplugin-vue-define-options/vite'; import Components from 'unplugin-vue-components/vite'; import AutoImport from 'unplugin-auto-import/vite'; import Pages from 'vite-plugin-pages'; import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue({ template: { compilerOptions: { isCustomElement: (tag) => [ 'ping-connect-wallet', 'ping-token-convert', 'ping-tx-dialog', ].includes(tag), }, }, }), vueJsx(), vuetify({ styles: { configFile: 'src/plugins/vuetify/styles/variables/_vuetify.scss', }, }), Pages({ dirs: ['./src/modules', './src/pages'], exclude: ['**/*.ts'], // only load .vue as modules }), Layouts({ layoutsDirs: './src/layouts/', }), Components({ dirs: ['src/plugins/vuetify/@core/components'], dts: true, }), AutoImport({ imports: [ 'vue', 'vue-router', '@vueuse/core', '@vueuse/math', 'vue-i18n', 'pinia', ], vueTemplate: true, }), VueI18nPlugin({ runtimeOnly: true, compositionOnly: true, include: [ fileURLToPath( new URL('./src/plugins/i18n/locales/**', import.meta.url) ), ], }), DefineOptions(), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), '@themeConfig': fileURLToPath( new URL('./themeConfig.ts', import.meta.url) ), '@configured-variables': fileURLToPath( new URL( './src/plugins/vuetify/styles/variables/_template.scss', import.meta.url ) ), '@core': fileURLToPath( new URL('./src/plugins/vuetify/@core', import.meta.url) ), '@layouts': fileURLToPath( new URL('./src/plugins/vuetify/@layouts', import.meta.url) ), '@images': fileURLToPath( new URL('./src/plugins/vuetify/images/', import.meta.url) ), '@styles': fileURLToPath( new URL('./src/plugins/vuetify/styles/', import.meta.url) ), }, }, optimizeDeps: { exclude: ['vuetify'], entries: ['./src/**/*.vue'], }, });