/** * https://github.com/antfu-collective/vitesse/blob/47618e72dfba76c77b9b85b94784d739e35c492b/vite.config.ts * https://github.com/vue-macros/vue-macros/blob/main/playground/vue3/vite.config.ts */ import VueI18n from '@intlify/unplugin-vue-i18n/vite'; import { PrimeVueResolver } from '@primevue/auto-import-resolver'; import { unheadVueComposablesImports } from '@unhead/vue'; import { VantResolver } from '@vant/auto-import-resolver'; import Vue from '@vitejs/plugin-vue'; import VueJsx from '@vitejs/plugin-vue-jsx'; import path from 'node:path'; import UnoCSS from 'unocss/vite'; import AutoImport from 'unplugin-auto-import/vite'; import { FileSystemIconLoader } from 'unplugin-icons/loaders'; import IconsResolver from 'unplugin-icons/resolver'; import Icons from 'unplugin-icons/vite'; import { AntDesignVueResolver, NaiveUiResolver, TDesignResolver } from 'unplugin-vue-components/resolvers'; import Components from 'unplugin-vue-components/vite'; import VueMacros from 'unplugin-vue-macros/vite'; import Markdown from 'unplugin-vue-markdown/vite'; import { getPascalCaseRouteName, VueRouterAutoImports } from 'unplugin-vue-router'; import VueRouter from 'unplugin-vue-router/vite'; import { createUtils4uAutoImports } from 'utils4u/auto-imports'; import { type PluginOption } from 'vite'; import { checker } from 'vite-plugin-checker'; import { vitePluginFakeServer } from 'vite-plugin-fake-server'; import VitePluginImageTools from 'vite-plugin-image-tools'; import pluginPurgeCss from 'vite-plugin-purgecss-updated-v5'; import { viteSingleFile } from 'vite-plugin-singlefile'; import { viteStaticCopy } from 'vite-plugin-static-copy'; import VueDevTools from 'vite-plugin-vue-devtools'; import MetaLayouts from 'vite-plugin-vue-meta-layouts'; import { ViteWebfontDownload } from 'vite-plugin-webfont-dl'; import { viteArchiverPlugin } from './vite.config.plugin.archiver'; const cesiumSource = 'node_modules/cesium/Build/Cesium'; // This is the base url for static files that CesiumJS needs to load. // Set to an empty string to place the files at the site's root path export const cesiumBaseUrl = 'cesiumStatic'; export function Plugins() { const plugins: PluginOption[] = []; plugins.push( // https://vue-macros.dev/zh-CN/guide/bundler-integration.html VueMacros({ plugins: { vue: Vue({ include: [/\.vue$/, /\.md$/] }), vueJsx: VueJsx(), // https://uvr.esm.is/guide/configuration.html // https://github.com/posva/unplugin-vue-router vueRouter: VueRouter({ exclude: ['**/__*', '**/__*/**/*'], extensions: ['.page.vue', '.page.md'], getRouteName: (routeNode) => getPascalCaseRouteName(routeNode), logs: false, routesFolder: 'src/pages', }), }, }), // https://github.com/JohnCampionJr/vite-plugin-vue-layouts?tab=readme-ov-file#configuration // Layouts({ defaultLayout: 'sakai-vue/AppLayout', pagesDirs: [] }), // https://github.com/dishait/vite-plugin-vue-meta-layouts MetaLayouts({ // defaultLayout: 'sakai-vue/AppLayout', defaultLayout: 'naive-ui/AppLayout', skipTopLevelRouteLayout: false, // 打开修复 https://github.com/JohnCampionJr/vite-plugin-vue-layouts/issues/134,默认为 false 关闭 }), // https://github.com/antfu/unocss // see uno.config.ts for config UnoCSS(), // https://github.com/unplugin/unplugin-vue-markdown Markdown({ headEnabled: true, }), // https://github.com/antfu/unplugin-auto-import AutoImport({ dirs: [ // 'src/composables', 'src/stores', 'src/utils', ], imports: [ 'vue', 'vue-i18n', 'pinia', '@vueuse/core', VueRouterAutoImports, unheadVueComposablesImports, // 参考这个重写 utils4u 的 createUtils4uAutoImports 的逻辑 https://github.com/unplugin/unplugin-auto-import/blob/main/src/presets/vueuse-core.ts createUtils4uAutoImports(['primevue']), { 'consola/browser': ['consola'], 'vue-router/auto': ['useLink'], 'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'], }, ], resolvers: [TDesignResolver({ esm: true, library: 'mobile-vue' }), VantResolver({ importStyle: true })], vueTemplate: true, }), // https://github.com/antfu/unplugin-vue-components Components({ // __开头的 excludeNames: [/^__/], // allow auto load markdown components under `./src/components/` extensions: ['vue', 'md'], // allow auto import and register components used in markdown include: [/\.vue$/, /\.vue\?vue/, /\.md$/], resolvers: [ AntDesignVueResolver({ importStyle: false, // css in js resolveIcons: true, }), IconsResolver({ customCollections: ['svg'], prefix: 'icon', }), // https://github.com/unplugin/unplugin-icons?tab=readme-ov-file#auto-importing TDesignResolver({ esm: true, library: 'mobile-vue' }), VantResolver({ importStyle: true }), PrimeVueResolver(/* { components: { prefix: 'P' } } */), NaiveUiResolver(), ], }), // https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n VueI18n({ /* options */ // locale messages resource pre-compile option include: [path.resolve(import.meta.dirname, './src/locales/**')], // https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n#transformi18nblock // transformI18nBlock(src) { // console.debug(`src :>> `, src); // console.debug(`typeof src :>> `, typeof src); // return src as string; // }, }), Icons({ autoInstall: true, customCollections: { svg: FileSystemIconLoader('src/assets/icons/svgs', (svg) => { return svg.replace(/^ { plugins.push( // https://github.com/webfansplz/vite-plugin-vue-devtools VueDevTools({ // launchEditor: env.LAUNCH_EDITOR, }), // https://github.com/unplugin/unplugin-vue-components/issues/664$0 // https://github.com/VaJoy/vite-plugin-cdn-import-async$0 // https://github.com/mmf-fe/vite-plugin-cdn-import/blob/HEAD/README.zh-CN.md // 会对 Components 插件的自动导入产生影响。 // cdnImport({ // enableInDevMode: true, // modules: ['vue'], // prodUrl: '//fastly.jsdelivr.net/npm/{name}@{version}/{path}', // }), viteSingleFile(), // https://github.com/rsnakdmx/vite-plugin-purgecss-v5?tab=readme-ov-file#-usage pluginPurgeCss({ variables: true, }), ); }; return plugins; }