first commit

This commit is contained in:
hooray
2021-08-27 10:32:21 +08:00
commit fef4cd36fb
234 changed files with 41663 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
import banner from 'vite-plugin-banner'
export default function createBanner() {
return banner(`
/**
* name: Fantastic-admin
* homepage: https://hooray.gitee.io/fantastic-admin/
*/
`)
}
+25
View File
@@ -0,0 +1,25 @@
import compression from 'vite-plugin-compression'
export default function createCompression(env) {
const { VITE_BUILD_COMPRESS } = env
const compressList = VITE_BUILD_COMPRESS.split(',')
const plugin = []
if (compressList.includes('gzip')) {
plugin.push(
compression({
ext: '.gz',
deleteOriginFile: false
})
)
}
if (compressList.includes('brotli')) {
plugin.push(
compression({
ext: '.br',
algorithm: 'brotliCompress',
deleteOriginFile: false
})
)
}
return plugin
}
+16
View File
@@ -0,0 +1,16 @@
import htmlPlugin from 'vite-plugin-html'
export default function createHtml(env, isBuild) {
const { VITE_APP_TITLE, VITE_APP_DEBUG_TOOL, VITE_APP_MODE } = env
const html = htmlPlugin({
inject: {
injectData: {
title: VITE_APP_TITLE,
debugTool: VITE_APP_DEBUG_TOOL,
appMode: VITE_APP_MODE
}
},
minify: isBuild
})
return html
}
+21
View File
@@ -0,0 +1,21 @@
import vue from '@vitejs/plugin-vue'
import createRestart from './restart'
import createHtml from './html'
import createSvgIcon from './svg-icon'
import createMock from './mock'
import createCompression from './compression'
import createSpritesmith from './spritesmith'
import createBanner from './banner'
export default function createVitePlugins(viteEnv, isBuild = false) {
const vitePlugins = [vue()]
!isBuild && vitePlugins.push(createRestart())
vitePlugins.push(createHtml(viteEnv, isBuild))
vitePlugins.push(createSvgIcon(isBuild))
vitePlugins.push(createMock())
isBuild && vitePlugins.push(...createCompression(viteEnv))
vitePlugins.push(...createSpritesmith())
vitePlugins.push(createBanner())
return vitePlugins
}
+11
View File
@@ -0,0 +1,11 @@
import { viteMockServe } from 'vite-plugin-mock'
export default function createMock() {
return viteMockServe({
mockPath: 'src/mock',
injectCode: `
import { setupProdMockServer } from './mockProdServer';
setupProdMockServer();
`
})
}
+9
View File
@@ -0,0 +1,9 @@
import ViteRestart from 'vite-plugin-restart'
export default function createRestart() {
return ViteRestart({
restart: [
'.env.development'
]
})
}
+49
View File
@@ -0,0 +1,49 @@
import spritesmith from 'vite-plugin-spritesmith'
import fs from 'fs'
export default function createSpritesmith(isBuild) {
const spriteDirnames = []
fs.readdirSync('src/assets/sprites').map(dirname => {
if (fs.statSync(`src/assets/sprites/${dirname}`).isDirectory()) {
spriteDirnames.push(dirname)
}
})
const plugin = []
spriteDirnames.map(item => {
plugin.push(
spritesmith({
watch: !isBuild,
src: {
cwd: `./src/assets/sprites/${item}`,
glob: '*.png'
},
target: {
image: `./src/assets/sprites/${item}.png`,
css: [
[
`./src/assets/sprites/_${item}.scss`,
{
format: 'handlebars_based_template'
}
]
]
},
apiOptions: {
cssImageRef: `@/assets/sprites/${item}.png`,
spritesheet_info: {
name: item,
format: 'handlebars_based_template'
}
},
customTemplates: {
handlebars_based_template: './scss.template.hbs'
},
spritesmithOptions: {
algorithm: 'binary-tree',
padding: 10
}
})
)
})
return plugin
}
+10
View File
@@ -0,0 +1,10 @@
import svgIcon from 'vite-plugin-svg-icons'
import path from 'path'
export default function createSvgIcon(isBuild) {
return svgIcon({
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/')],
symbolId: 'icon-[dir]-[name]',
svgoOptions: isBuild
})
}