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(), ] }