新增前端vue
This commit is contained in:
42
web-vue/packages/vite/plugins/compress.ts
Normal file
42
web-vue/packages/vite/plugins/compress.ts
Normal 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;
|
||||
}
|
||||
17
web-vue/packages/vite/plugins/html.ts
Normal file
17
web-vue/packages/vite/plugins/html.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
66
web-vue/packages/vite/plugins/index.ts
Normal file
66
web-vue/packages/vite/plugins/index.ts
Normal 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,
|
||||
};
|
||||
18
web-vue/packages/vite/plugins/legacy.ts
Normal file
18
web-vue/packages/vite/plugins/legacy.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
15
web-vue/packages/vite/plugins/monacoEditor.ts
Normal file
15
web-vue/packages/vite/plugins/monacoEditor.ts
Normal 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',
|
||||
});
|
||||
}
|
||||
12
web-vue/packages/vite/plugins/unocss.ts
Normal file
12
web-vue/packages/vite/plugins/unocss.ts
Normal 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);
|
||||
}
|
||||
23
web-vue/packages/vite/plugins/visualizer.ts
Normal file
23
web-vue/packages/vite/plugins/visualizer.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user