// vite.config.ts import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; import path from 'path'; import AutoImport from 'unplugin-auto-import/vite'; import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'; import Components from 'unplugin-vue-components/vite'; import Markdown from 'unplugin-vue-markdown/vite'; import { defineConfig } from 'vite'; import oxlintPlugin from 'vite-plugin-oxlint'; import svgLoader from 'vite-svg-loader'; import { VineVitePlugin } from 'vue-vine/vite'; // 自定义SVGO插件,删除所有名称以sodipodi:和inkscape:开头的元素 const removeSodipodiInkscape = { name: 'removeSodipodiInkscape', description: '删除所有名称以sodipodi:和inkscape:开头的元素', fn: () => { return { element: { enter: (node, parentNode) => { // 检查元素名称是否以sodipodi:或inkscape:开头 if (node.name && (node.name.startsWith('sodipodi:') || node.name.startsWith('inkscape:'))) { // 从父节点的children数组中过滤掉当前节点 parentNode.children = parentNode.children.filter(child => child !== node); } }, }, }; }, }; export default defineConfig({ plugins: [ vue({ script: { propsDestructure: true, defineModel: true }, include: [/\.vue$/, /\.md$/], template: { compilerOptions: { isCustomElement: (tag) => { return tag.includes(':') || tag.startsWith('yt-'); } } } }), vueJsx(), svgLoader({ svgoConfig: { plugins: [ { name: 'preset-default', params: { overrides: { removeEditorsNSData: false, } } }, removeSodipodiInkscape, "convertStyleToAttrs", "removeUselessDefs", "removeUselessStrokeAndFill", "removeUnusedNS", "removeEmptyText", "removeEmptyContainers", "removeViewBox", "cleanupIds", ] } }), Markdown({ /* options */ }), AutoImport({ imports: ['vue', 'vue-router', '@vueuse/core', 'pinia', 'date-fns', { 'naive-ui': [ 'useDialog', 'useMessage', 'useNotification', 'useLoadingBar' ] }], dts: 'src/auto-imports.d.ts' }), Components({ resolvers: [NaiveUiResolver()], dts: 'src/components.d.ts', extensions: ['vue', 'md'], include: [/\.vue$/, /\.vue\?vue/, /\.md$/, /\.vine$/], }), oxlintPlugin(), VineVitePlugin(), ], server: { port: 51000 }, resolve: { alias: { '@': path.resolve(__dirname, 'src') } }, define: { 'process.env': {}, global: 'window' }, optimizeDeps: { include: ['@vicons/fluent', '@vicons/ionicons5', 'vue', 'vue-router'] }, build: { sourcemap: true, }, });