新增前端vue

This commit is contained in:
2025-11-26 13:55:01 +08:00
parent ae391f1b94
commit ffd5a6ad66
781 changed files with 83348 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import compressPlugin from 'vite-plugin-compression';
/**
* Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated
* https://github.com/anncwb/vite-plugin-compression
*/
export function configCompressPlugin(isBuild: boolean, viteEnv: ViteEnv): PluginOption {
if (!isBuild) {
return [];
}
const plugins: PluginOption = [];
const compress: 'gzip' | 'brotli' | 'none' = viteEnv.VITE_BUILD_COMPRESS;
const deleteOriginFile = viteEnv.VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE || false;
const compressList = compress.split(',');
if (compressList.includes('gzip')) {
plugins.push(
compressPlugin({
ext: '.gz',
deleteOriginFile,
}),
);
}
if (compressList.includes('brotli')) {
plugins.push(
compressPlugin({
ext: '.br',
algorithm: 'brotliCompress',
deleteOriginFile,
}),
);
}
return plugins;
}

View File

@@ -0,0 +1,17 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import { createHtmlPlugin } from 'vite-plugin-html';
/**
* Plugin to minimize and use ejs template syntax in index.html.
* https://github.com/anncwb/vite-plugin-html
*/
export function configHtmlPlugin(isBuild: boolean): PluginOption {
return createHtmlPlugin({
minify: isBuild,
});
}

View File

@@ -0,0 +1,66 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
import vitePluginCertificate from 'vite-plugin-mkcert';
import { appConfigPlugin } from '../config/appConfig';
import { configCompressPlugin } from './compress';
import { configHtmlPlugin } from './html';
import { configLegacyPlugin } from './legacy';
import { configThemePlugin } from '../theme';
import { configUnoCSSPlugin } from './unocss';
import { configMonacoEditorPlugin } from './monacoEditor';
import { configVisualizerPlugin } from './visualizer';
export function createVitePlugins(isBuild: boolean, viteEnv: ViteEnv) {
const vitePlugins: PluginOption[] = [
vue(),
vueJsx(),
vueSetupExtend(),
vitePluginCertificate({
source: 'coding',
}),
];
// app-config-plugin
vitePlugins.push(appConfigPlugin(isBuild, viteEnv));
// UnoCSS-vite-plugin
vitePlugins.push(configUnoCSSPlugin());
// vite-plugin-html
vitePlugins.push(configHtmlPlugin(isBuild));
// vite-plugin-monaco-editor
vitePlugins.push(configMonacoEditorPlugin());
// rollup-plugin-visualizer
vitePlugins.push(configVisualizerPlugin());
// vite-plugin-theme-vite3
vitePlugins.push(configThemePlugin(isBuild));
// rollup-plugin-gzip
vitePlugins.push(configCompressPlugin(isBuild, viteEnv));
// @vitejs/plugin-legacy
vitePlugins.push(configLegacyPlugin(isBuild, viteEnv));
return vitePlugins;
}
export {
appConfigPlugin,
configCompressPlugin,
configHtmlPlugin,
configLegacyPlugin,
configThemePlugin,
configUnoCSSPlugin,
configMonacoEditorPlugin,
configVisualizerPlugin,
};

View File

@@ -0,0 +1,18 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import legacy from '@vitejs/plugin-legacy';
import { legacyTargets } from '../options/build';
export function configLegacyPlugin(isBuild: boolean, viteEnv: ViteEnv): PluginOption {
if (!(isBuild && viteEnv.VITE_LEGACY)) {
return [];
}
return legacy({
targets: legacyTargets,
modernPolyfills: true,
});
}

View File

@@ -0,0 +1,15 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import type { PluginOption } from 'vite';
import monacoEditorPlugin from 'vite-plugin-monaco-editor-esm';
export function configMonacoEditorPlugin(): PluginOption {
return monacoEditorPlugin({
languageWorkers: ['editorWorkerService', 'json', 'html'],
customDistPath: (root, buildOutDir) => `${buildOutDir}/monaco`,
publicPath: 'monaco',
});
}

View File

@@ -0,0 +1,12 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import UnoCSS from 'unocss/vite';
import UnoCSSConfig from '../../../uno.config';
export function configUnoCSSPlugin(): PluginOption {
return UnoCSS(UnoCSSConfig);
}

View File

@@ -0,0 +1,23 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author ThinkGem
*/
import { type PluginOption } from 'vite';
import visualizer from 'rollup-plugin-visualizer';
export function isReportMode(): boolean {
return process.env.REPORT === 'true';
}
export function configVisualizerPlugin(): PluginOption {
if (!isReportMode()) {
return [];
}
return visualizer({
filename: './node_modules/.cache/visualizer/stats.html',
open: true,
gzipSize: true,
brotliSize: true,
});
}