diff --git a/Vite/plugins/compression.ts b/Vite/plugins/compression.ts new file mode 100644 index 0000000..b710eb5 --- /dev/null +++ b/Vite/plugins/compression.ts @@ -0,0 +1,28 @@ +import compression from 'vite-plugin-compression'; + +export default function createCompression(env) { + const { VITE_BUILD_COMPRESS } = env; + const plugin: any[] = []; + if (VITE_BUILD_COMPRESS) { + const compressList = VITE_BUILD_COMPRESS.split(','); + if (compressList.includes('gzip')) { + // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 + plugin.push( + compression({ + ext: '.gz', + deleteOriginFile: false + }) + ); + } + if (compressList.includes('brotli')) { + plugin.push( + compression({ + ext: '.br', + algorithm: 'brotliCompress', + deleteOriginFile: false + }) + ); + } + } + return plugin; +} diff --git a/Vite/plugins/index.ts b/Vite/plugins/index.ts index 001b56c..eebea14 100644 --- a/Vite/plugins/index.ts +++ b/Vite/plugins/index.ts @@ -4,6 +4,7 @@ import createAutoImport from './auto-import'; import createComponents from './components'; import createIcons from './icons'; import createSvgIconsPlugin from './svg-icon'; +import createCompression from './compression'; import path from 'path'; export default (viteEnv, isBuild = false): [] => { @@ -12,7 +13,8 @@ export default (viteEnv, isBuild = false): [] => { vitePlusgins.push(createUnoCss()); vitePlusgins.push(createAutoImport(path)); vitePlusgins.push(createComponents(path)); + vitePlusgins.push(createCompression(viteEnv)); vitePlusgins.push(createIcons()); - vitePlusgins.push(createSvgIconsPlugin(path)); + vitePlusgins.push(createSvgIconsPlugin(path, isBuild)); return vitePlusgins; }; diff --git a/Vite/plugins/svg-icon.ts b/Vite/plugins/svg-icon.ts index 0d83ce0..0ee8d65 100644 --- a/Vite/plugins/svg-icon.ts +++ b/Vite/plugins/svg-icon.ts @@ -1,9 +1,10 @@ import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'; -export default (path: any) => { +export default (path: any, isBuild: boolean) => { return createSvgIconsPlugin({ // 指定需要缓存的图标文件夹 iconDirs: [path.resolve(path.resolve(__dirname, '../../src'), 'assets/icons/svg')], // 指定symbolId格式 - symbolId: 'icon-[dir]-[name]' + symbolId: 'icon-[dir]-[name]', + svgoOptions: isBuild }); }; diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index dd052f6..c768719 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -6,7 +6,7 @@ @import './btn.scss'; @import './ruoyi.scss'; @import 'animate.css'; -// @import 'element-plus/dist/index.css'; +@import 'element-plus/dist/index.css'; body { height: 100%; diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts index 9e54a50..ae42063 100644 --- a/src/types/auto-imports.d.ts +++ b/src/types/auto-imports.d.ts @@ -8,6 +8,7 @@ declare global { const ElMessageBox: typeof import('element-plus/es')['ElMessageBox'] const ElNotification: typeof import('element-plus/es')['ElNotification'] const ElSelect: typeof import('element-plus/es')['ElSelect'] + const ElTable: typeof import('element-plus/es')['ElTable'] const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] @@ -293,6 +294,7 @@ declare module 'vue' { readonly ElMessageBox: UnwrapRef readonly ElNotification: UnwrapRef readonly ElSelect: UnwrapRef + readonly ElTable: UnwrapRef readonly acceptHMRUpdate: UnwrapRef readonly asyncComputed: UnwrapRef readonly autoResetRef: UnwrapRef