161 lines
4.3 KiB
TypeScript
161 lines
4.3 KiB
TypeScript
import { resolve } from 'path'
|
|
import { env } from './shared/env'
|
|
import Vue from '@vitejs/plugin-vue'
|
|
import Icons from 'unplugin-icons/vite'
|
|
import Inspect from 'vite-plugin-inspect'
|
|
import Markdown from './plugins/markdown'
|
|
import Windicss from 'vite-plugin-windicss'
|
|
import vueJsx from '@vitejs/plugin-vue-jsx'
|
|
import Rmovelog from 'vite-plugin-removelog'
|
|
import { viteMockServe } from 'vite-plugin-mock'
|
|
import VueRouter from 'unplugin-vue-router/vite'
|
|
import Layouts from 'vite-plugin-vue-meta-layouts'
|
|
import AutoImport from 'unplugin-auto-import/vite'
|
|
import IconsResolver from 'unplugin-icons/resolver'
|
|
import Components from 'unplugin-vue-components/vite'
|
|
import viteCompression from 'vite-plugin-compression'
|
|
import { markdownWrapperClasses } from './plugins/markdown'
|
|
import { VueRouterAutoImports } from 'unplugin-vue-router'
|
|
import I18N from '@intlify/unplugin-vue-i18n/vite'
|
|
|
|
import {
|
|
ArcoResolver,
|
|
IduxResolver,
|
|
VantResolver,
|
|
DevUiResolver,
|
|
QuasarResolver,
|
|
ViewUiResolver,
|
|
InklineResolver,
|
|
TDesignResolver,
|
|
NaiveUiResolver,
|
|
Vuetify3Resolver,
|
|
VarletUIResolver,
|
|
LayuiVueResolver,
|
|
PrimeVueResolver,
|
|
HeadlessUiResolver,
|
|
ElementPlusResolver,
|
|
AntDesignVueResolver,
|
|
VueUseComponentsResolver,
|
|
} from 'unplugin-vue-components/resolvers'
|
|
import Modules from 'vite-plugin-use-modules'
|
|
import { GenerateTitle } from './plugins/html'
|
|
// @ts-ignore
|
|
import VueMarcos from 'unplugin-vue-macros/vite'
|
|
import { AutoImportResolvers, normalizeResolvers } from './shared/resolvers'
|
|
|
|
export default () => {
|
|
return [
|
|
// https://github.com/sxzz/unplugin-vue-macros/blob/main/README-zh-CN.md
|
|
VueMarcos({
|
|
hoistStatic: true,
|
|
defineOptions: true,
|
|
}),
|
|
// https://github.com/posva/unplugin-vue-router
|
|
VueRouter({
|
|
routesFolder: 'src/pages',
|
|
extensions: ['.md', '.vue', '.tsx'],
|
|
dts: 'presets/types/type-router.d.ts',
|
|
}),
|
|
// 模块自动加载
|
|
Modules({
|
|
auto: true,
|
|
}),
|
|
// 生成 title
|
|
GenerateTitle(),
|
|
// vue 官方插件,用来解析 sfc
|
|
Vue({
|
|
include: [/\.vue$/, /\.md$/],
|
|
}),
|
|
// markdown 编译插件
|
|
Markdown(),
|
|
// 布局系统
|
|
Layouts(),
|
|
// 调试工具
|
|
Inspect({
|
|
enabled: env.VITE_APP_INSPECT,
|
|
}),
|
|
// windicss 插件
|
|
Windicss({
|
|
safelist: markdownWrapperClasses,
|
|
}),
|
|
// mock 服务
|
|
viteMockServe({
|
|
prodEnabled: env.VITE_APP_MOCK_IN_PRODUCTION,
|
|
}),
|
|
// https://icones.netlify.app/
|
|
Icons({
|
|
autoInstall: true,
|
|
}),
|
|
// 组件自动按需引入
|
|
Components({
|
|
extensions: ['md', 'vue', 'tsx'],
|
|
dts: resolve(__dirname, './types/components.d.ts'),
|
|
types: [
|
|
{
|
|
from: 'vue-router',
|
|
names: ['RouterLink', 'RouterView'],
|
|
},
|
|
],
|
|
resolvers: normalizeResolvers({
|
|
onlyExist: [
|
|
[VantResolver(), 'vant'],
|
|
[QuasarResolver(), 'quasar'],
|
|
[DevUiResolver(), 'vue-devui'],
|
|
[NaiveUiResolver(), 'naive-ui'],
|
|
[Vuetify3Resolver(), 'vuetify'],
|
|
[PrimeVueResolver(), 'primevue'],
|
|
[ViewUiResolver(), 'view-design'],
|
|
[LayuiVueResolver(), 'layui-vue'],
|
|
[VarletUIResolver(), '@varlet/ui'],
|
|
[IduxResolver(), '@idux/components'],
|
|
[TDesignResolver(), 'tdesign-vue-next'],
|
|
[InklineResolver(), '@inkline/inkline'],
|
|
[ElementPlusResolver(), 'element-plus'],
|
|
[HeadlessUiResolver(), '@headlessui/vue'],
|
|
[ArcoResolver(), '@arco-design/web-vue'],
|
|
[AntDesignVueResolver(), 'ant-design-vue'],
|
|
[VueUseComponentsResolver(), '@vueuse/components'],
|
|
],
|
|
include: [IconsResolver()],
|
|
}),
|
|
}),
|
|
// api 自动按需引入
|
|
env.VITE_APP_API_AUTO_IMPORT &&
|
|
AutoImport({
|
|
dirs: [
|
|
env.VITE_APP_API_AUTO_IMPORT && 'src/stores/**/*.ts',
|
|
env.VITE_APP_API_AUTO_IMPORT && 'src/composables/**/*.ts',
|
|
],
|
|
dts: './presets/types/auto-imports.d.ts',
|
|
imports: [
|
|
'vue',
|
|
'pinia',
|
|
'vue-i18n',
|
|
'@vueuse/core',
|
|
VueRouterAutoImports,
|
|
],
|
|
resolvers: AutoImportResolvers,
|
|
eslintrc: {
|
|
enabled: true,
|
|
globalsPropValue: true,
|
|
filepath: 'presets/eslint/.eslintrc-auto-import.json',
|
|
},
|
|
}),
|
|
// i18n 国际化支持
|
|
I18N({
|
|
runtimeOnly: false,
|
|
compositionOnly: true,
|
|
include: [resolve(__dirname, '../locales/**')],
|
|
}),
|
|
// tsx 支持
|
|
vueJsx(),
|
|
// 生产环境资源压缩
|
|
viteCompression({
|
|
// @ts-ignore
|
|
algorithm: env.VITE_APP_COMPRESSINON_ALGORITHM,
|
|
}),
|
|
// 生产环境下移除 console.log, console.warn, console.error
|
|
// Rmovelog(),
|
|
]
|
|
}
|