初始化

This commit is contained in:
xiaoyi
2024-01-27 19:53:17 +08:00
commit 07dbe71c31
840 changed files with 119152 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
import autoImport from 'unplugin-auto-import/vite'
export default function createAutoImport() {
return autoImport({
imports: [
'vue',
'vue-router',
'pinia',
],
dts: './src/types/auto-imports.d.ts',
dirs: [
'./src/utils/composables/**',
],
})
}

View File

@@ -0,0 +1,12 @@
import banner from 'vite-plugin-banner'
export default function createBanner() {
return banner(`
/**
* 由 Fantastic-admin 提供技术支持
* Powered by Fantastic-admin
* Gitee https://gitee.com/hooray/fantastic-admin
* Github https://github.com/hooray/fantastic-admin
*/
`)
}

View File

@@ -0,0 +1,9 @@
import components from 'unplugin-vue-components/vite'
export default function createComponents() {
return components({
dirs: ['src/components'],
include: [/\.vue$/, /\.vue\?vue/, /\.tsx$/],
dts: './src/types/components.d.ts',
})
}

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: any[] = []
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
}

View File

@@ -0,0 +1,35 @@
import type { PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import createInspector from './inspector'
import createAutoImport from './auto-import'
import createComponents from './components'
import createSetupExtend from './setup-extend'
import createSvgIcon from './svg-icon'
import createMock from './mock'
import createLayouts from './layouts'
import createPages from './pages'
// import createCompression from './compression'
import createSpritesmith from './spritesmith'
import createBanner from './banner'
export default function createVitePlugins(viteEnv, isBuild = false) {
const vitePlugins: (PluginOption | PluginOption[])[] = [
vue(),
vueJsx(),
]
vitePlugins.push(createInspector())
vitePlugins.push(createAutoImport())
vitePlugins.push(createComponents())
vitePlugins.push(createSetupExtend())
vitePlugins.push(createSvgIcon(isBuild))
vitePlugins.push(createMock(viteEnv, isBuild))
vitePlugins.push(createLayouts())
vitePlugins.push(createPages())
// isBuild && vitePlugins.push(...createCompression(viteEnv))
vitePlugins.push(...createSpritesmith(isBuild))
vitePlugins.push(createBanner())
return vitePlugins
}

View File

@@ -0,0 +1,6 @@
// import Inspector from 'vite-plugin-vue-inspector'
export default function createInspector() {
// return Inspector()
}

View File

@@ -0,0 +1,7 @@
import Layouts from 'vite-plugin-vue-meta-layouts'
export default function createLayouts() {
return Layouts({
defaultLayout: 'index',
})
}

View File

@@ -0,0 +1,14 @@
import { viteMockServe } from 'vite-plugin-mock'
export default function createMock(env, isBuild) {
const { VITE_BUILD_MOCK } = env
return viteMockServe({
mockPath: 'src/mock',
localEnabled: !isBuild,
prodEnabled: isBuild && VITE_BUILD_MOCK === 'true',
injectCode: `
import { setupProdMockServer } from './mockProdServer';
setupProdMockServer();
`,
})
}

View File

@@ -0,0 +1,10 @@
import Pages from 'vite-plugin-pages'
export default function createPages() {
return Pages({
dirs: 'src/views',
exclude: [
'**/components/**/*.vue',
],
})
}

View File

@@ -0,0 +1,5 @@
import setupExtend from 'unplugin-vue-setup-extend-plus/vite'
export default function createSetupExtend() {
return setupExtend({})
}

View File

@@ -0,0 +1,49 @@
import fs from 'fs'
import spritesmith from 'vite-plugin-spritesmith'
export default function createSpritesmith(isBuild) {
const spriteDirnames: string[] = []
fs.readdirSync('src/assets/sprites').forEach((dirname) => {
if (fs.statSync(`src/assets/sprites/${dirname}`).isDirectory()) {
spriteDirnames.push(dirname)
}
})
const plugin: any[] = []
spriteDirnames.forEach((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
}

View File

@@ -0,0 +1,10 @@
import path from 'node:path'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
export default function createSvgIcon(isBuild) {
return createSvgIconsPlugin({
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/')],
symbolId: 'icon-[dir]-[name]',
svgoOptions: isBuild,
})
}