123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import path from 'node:path'
- import process from 'node:process'
- import type { PluginOption } from 'vite'
- import VueRouter from 'unplugin-vue-router/vite'
- import vue from '@vitejs/plugin-vue'
- import vueJsx from '@vitejs/plugin-vue-jsx'
- import vueLegacy from '@vitejs/plugin-legacy'
- import VueDevTools from 'vite-plugin-vue-devtools'
- import autoImport from 'unplugin-auto-import/vite'
- import { VueRouterAutoImports } from 'unplugin-vue-router'
- import components from 'unplugin-vue-components/vite'
- import Unocss from 'unocss/vite'
- import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
- import { vitePluginFakeServer } from 'vite-plugin-fake-server'
- import { compression } from 'vite-plugin-compression2'
- import Archiver from 'vite-plugin-archiver'
- import TurboConsole from 'unplugin-turbo-console/vite'
- import banner from 'vite-plugin-banner'
- import boxen from 'boxen'
- import picocolors from 'picocolors'
- export default function createVitePlugins(viteEnv, isBuild = false) {
- const vitePlugins: (PluginOption | PluginOption[])[] = [
- VueRouter({
- routesFolder: './src/views',
- dts: './src/types/typed-router.d.ts',
- exclude: ['**/components', '**/_*/**', '**/_*'],
- }),
- vue(),
- vueJsx(),
- vueLegacy({
- renderLegacyChunks: false,
- modernPolyfills: [
- 'es.array.at',
- ],
- }),
- // https://github.com/vuejs/devtools-next
- viteEnv.VITE_OPEN_DEVTOOLS === 'true' && VueDevTools(),
- // https://github.com/unplugin/unplugin-auto-import
- autoImport({
- imports: [
- 'vue',
- 'pinia',
- VueRouterAutoImports,
- {
- 'vue-router/auto': ['useLink'],
- },
- ],
- dts: './src/types/auto-imports.d.ts',
- dirs: [
- './src/utils/composables/**',
- ],
- }),
- // https://github.com/unplugin/unplugin-vue-components
- components({
- dirs: [
- 'src/components/*',
- 'src/ui-kit',
- ],
- deep: false,
- include: [/\.vue$/, /\.vue\?vue/, /\.tsx$/],
- dts: './src/types/components.d.ts',
- }),
- Unocss(),
- // https://github.com/vbenjs/vite-plugin-svg-icons
- createSvgIconsPlugin({
- iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/')],
- symbolId: 'icon-[dir]-[name]',
- svgoOptions: isBuild,
- }),
- // https://github.com/condorheroblog/vite-plugin-fake-server
- vitePluginFakeServer({
- logger: !isBuild,
- include: 'src/mock',
- infixName: false,
- enableProd: isBuild && viteEnv.VITE_BUILD_MOCK === 'true',
- }),
- // https://github.com/nonzzz/vite-plugin-compression
- viteEnv.VITE_BUILD_COMPRESS?.split(',').includes('gzip') && compression(),
- viteEnv.VITE_BUILD_COMPRESS?.split(',').includes('brotli') && compression({
- exclude: [/\.(br)$/, /\.(gz)$/],
- algorithm: 'brotliCompress',
- }),
- viteEnv.VITE_BUILD_ARCHIVE && Archiver({
- archiveType: viteEnv.VITE_BUILD_ARCHIVE,
- }),
- // https://github.com/unplugin/unplugin-turbo-console
- TurboConsole(),
- // https://github.com/chengpeiquan/vite-plugin-banner
- banner(`
- /**
- * 由 Fantastic-mobile 提供技术支持
- * Powered by Fantastic-mobile
- * https://fantastic-mobile.hurui.me/
- */
- `),
- {
- name: 'vite-plugin-debug-plugin',
- transform: (code, id) => {
- if (/src\/main.ts$/.test(id)) {
- if (viteEnv.VITE_APP_DEBUG_TOOL === 'eruda') {
- code = code.concat(`
- import eruda from 'eruda'
- eruda.init()
- `)
- }
- else if (viteEnv.VITE_APP_DEBUG_TOOL === 'vconsole') {
- code = code.concat(`
- import VConsole from 'vconsole'
- new VConsole()
- `)
- }
- return {
- code,
- map: null,
- }
- }
- },
- },
- {
- name: 'appInfo',
- apply: 'serve',
- async buildStart() {
- const { bold, green, cyan, bgGreen, underline } = picocolors
- // eslint-disable-next-line no-console
- console.log(
- boxen(
- `${bold(green(`由 ${bgGreen('Fantastic-mobile')} 驱动`))}\n\n${underline('https://fantastic-mobile.hurui.me')}\n\n当前使用:${cyan('基础版')}`,
- {
- padding: 1,
- margin: 1,
- borderStyle: 'double',
- textAlignment: 'center',
- },
- ),
- )
- },
- },
- ]
- return vitePlugins
- }
|