Files
vtsuru.live/vite.config.mts
Megghy 1ae528b9a9 feat: 更新配置和组件以支持选择项功能, 开始手柄映射功能编写
- 在DynamicForm.vue中新增select组件支持
- 在VTsuruConfigTypes.ts中添加可选的条件显示属性
- 更新vite.config.mts以集成自定义SVGO插件
- 在components.d.ts中添加NDescriptionsItem组件声明
- 更新路由配置以包含obs_store模块
2025-05-11 05:49:50 +08:00

104 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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,
},
});