-
Notifications
You must be signed in to change notification settings - Fork 314
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
202 additions
and
275 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.