mirror of
https://github.com/xiaoyiweb/YiAi.git
synced 2025-10-22 09:53:43 +08:00
初始化
This commit is contained in:
15
admin/vite/plugins/auto-import.ts
Normal file
15
admin/vite/plugins/auto-import.ts
Normal 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/**',
|
||||
],
|
||||
})
|
||||
}
|
12
admin/vite/plugins/banner.ts
Normal file
12
admin/vite/plugins/banner.ts
Normal 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
|
||||
*/
|
||||
`)
|
||||
}
|
9
admin/vite/plugins/components.ts
Normal file
9
admin/vite/plugins/components.ts
Normal 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',
|
||||
})
|
||||
}
|
25
admin/vite/plugins/compression.ts
Normal file
25
admin/vite/plugins/compression.ts
Normal 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
|
||||
}
|
35
admin/vite/plugins/index.ts
Normal file
35
admin/vite/plugins/index.ts
Normal 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
|
||||
}
|
6
admin/vite/plugins/inspector.ts
Normal file
6
admin/vite/plugins/inspector.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
// import Inspector from 'vite-plugin-vue-inspector'
|
||||
|
||||
export default function createInspector() {
|
||||
// return Inspector()
|
||||
|
||||
}
|
7
admin/vite/plugins/layouts.ts
Normal file
7
admin/vite/plugins/layouts.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import Layouts from 'vite-plugin-vue-meta-layouts'
|
||||
|
||||
export default function createLayouts() {
|
||||
return Layouts({
|
||||
defaultLayout: 'index',
|
||||
})
|
||||
}
|
14
admin/vite/plugins/mock.ts
Normal file
14
admin/vite/plugins/mock.ts
Normal 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();
|
||||
`,
|
||||
})
|
||||
}
|
10
admin/vite/plugins/pages.ts
Normal file
10
admin/vite/plugins/pages.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import Pages from 'vite-plugin-pages'
|
||||
|
||||
export default function createPages() {
|
||||
return Pages({
|
||||
dirs: 'src/views',
|
||||
exclude: [
|
||||
'**/components/**/*.vue',
|
||||
],
|
||||
})
|
||||
}
|
5
admin/vite/plugins/setup-extend.ts
Normal file
5
admin/vite/plugins/setup-extend.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import setupExtend from 'unplugin-vue-setup-extend-plus/vite'
|
||||
|
||||
export default function createSetupExtend() {
|
||||
return setupExtend({})
|
||||
}
|
49
admin/vite/plugins/spritesmith.ts
Normal file
49
admin/vite/plugins/spritesmith.ts
Normal 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
|
||||
}
|
10
admin/vite/plugins/svg-icon.ts
Normal file
10
admin/vite/plugins/svg-icon.ts
Normal 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,
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user