Skip to content

Commit

Permalink
vite插件合并到单个文件中维护
Browse files Browse the repository at this point in the history
  • Loading branch information
hooray committed Jul 8, 2024
1 parent eedeb1b commit 51d330e
Show file tree
Hide file tree
Showing 17 changed files with 202 additions and 275 deletions.
202 changes: 202 additions & 0 deletions vite/plugins.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
import path from 'node:path'
import process from 'node:process'
import fs from 'node:fs'
import dayjs from 'dayjs'
import type { PluginOption } from '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 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 Layouts from 'vite-plugin-vue-meta-layouts'
import Pages from 'vite-plugin-pages'
import { compression } from 'vite-plugin-compression2'
import archiver from 'archiver'
import TurboConsole from 'unplugin-turbo-console/vite'
import banner from 'vite-plugin-banner'
import boxen from 'boxen'
import picocolors from 'picocolors'

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}

export default function createVitePlugins(viteEnv, isBuild = false) {
const vitePlugins: (PluginOption | PluginOption[])[] = [
vue(),
vueJsx(),
vueLegacy({
renderLegacyChunks: false,
modernPolyfills: [
'es.array.at',
'es.array.find-last',
],
}),

// https://github.com/vuejs/devtools-next
viteEnv.VITE_OPEN_DEVTOOLS === 'true' && VueDevTools(),

// https://github.com/unplugin/unplugin-auto-import
autoImport({
imports: [
'vue',
'vue-router',
'pinia',
],
dts: './src/types/auto-imports.d.ts',
dirs: [
'./src/utils/composables/**',
],
}),

// https://github.com/unplugin/unplugin-vue-components
components({
dirs: [
'src/components',
'src/layouts/ui-kit',
],
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/dishait/vite-plugin-vue-meta-layouts
Layouts({
defaultLayout: 'index',
}),

// https://github.com/hannoeru/vite-plugin-pages
Pages({
dirs: 'src/views',
exclude: [
'**/components/**/*.vue',
],
}),

// https://github.com/nonzzz/vite-plugin-compression
isBuild && viteEnv.VITE_BUILD_COMPRESS.split(',').includes('gzip') && compression(),
isBuild && viteEnv.VITE_BUILD_COMPRESS.split(',').includes('brotli') && compression({
exclude: [/\.(br)$/, /\.(gz)$/],
algorithm: 'brotliCompress',
}),

(function () {
let outDir: string
return {
name: 'vite-plugin-archiver',
apply: 'build',
configResolved(resolvedConfig) {
outDir = resolvedConfig.build.outDir
},
async closeBundle() {
if (['zip', 'tar'].includes(viteEnv.VITE_BUILD_ARCHIVE)) {
await sleep(1000)
const archive = archiver(viteEnv.VITE_BUILD_ARCHIVE, {
...(viteEnv.VITE_BUILD_ARCHIVE === 'zip' && { zlib: { level: 9 } }),
...(viteEnv.VITE_BUILD_ARCHIVE === 'tar' && { gzip: true, gzipOptions: { level: 9 } }),
})
const output = fs.createWriteStream(`${outDir}.${dayjs().format('YYYY-MM-DD-HH-mm-ss')}.${viteEnv.VITE_BUILD_ARCHIVE === 'zip' ? 'zip' : 'tar.gz'}`)
archive.pipe(output)
archive.directory(outDir, false)
archive.finalize()
}
},
}
})(),

// https://github.com/unplugin/unplugin-turbo-console
TurboConsole(),

// https://github.com/chengpeiquan/vite-plugin-banner
banner(`
/**
* 由 Fantastic-admin 提供技术支持
* Powered by Fantastic-admin
* https://fantastic-admin.github.io
*/
`),

{
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: 'vite-plugin-disable-devtool',
transform: (code, id) => {
if (/src\/main.ts$/.test(id)) {
if (viteEnv.VITE_APP_DISABLE_DEVTOOL === 'true') {
code = code.concat(`
import DisableDevtool from 'disable-devtool'
DisableDevtool()
`)
}
return {
code,
map: null,
}
}
},
},

{
name: 'vite-plugin-terminal-info',
apply: 'serve',
async buildStart() {
const { bold, green, cyan, bgGreen, underline } = picocolors
// eslint-disable-next-line no-console
console.log(
boxen(
`${bold(green(`由 ${bgGreen('Fantastic-admin')} 驱动`))}\n\n${underline('https://fantastic-admin.github.io')}\n\n当前使用:${cyan('基础版')}`,
{
padding: 1,
margin: 1,
borderStyle: 'double',
textAlignment: 'center',
},
),
)
},
},
]
return vitePlugins
}
25 changes: 0 additions & 25 deletions vite/plugins/app-info.ts

This file was deleted.

33 changes: 0 additions & 33 deletions vite/plugins/archiver.ts

This file was deleted.

15 changes: 0 additions & 15 deletions vite/plugins/auto-import.ts

This file was deleted.

11 changes: 0 additions & 11 deletions vite/plugins/banner.ts

This file was deleted.

12 changes: 0 additions & 12 deletions vite/plugins/components.ts

This file was deleted.

24 changes: 0 additions & 24 deletions vite/plugins/compression.ts

This file was deleted.

5 changes: 0 additions & 5 deletions vite/plugins/console.ts

This file was deleted.

28 changes: 0 additions & 28 deletions vite/plugins/debug-tool.ts

This file was deleted.

6 changes: 0 additions & 6 deletions vite/plugins/devtools.ts

This file was deleted.

22 changes: 0 additions & 22 deletions vite/plugins/disable-devtool.ts

This file was deleted.

Loading

0 comments on commit 51d330e

Please sign in to comment.