@kengic/vue 0.21.4 → 0.21.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/kengic-vue.js +1 -1
- package/dist/project/build/config/themeConfig.ts +67 -0
- package/dist/project/build/constant.ts +6 -0
- package/dist/project/build/generate/generateModifyVars.ts +39 -0
- package/dist/project/build/generate/icon/index.ts +66 -0
- package/dist/project/build/getConfigFileName.ts +7 -0
- package/dist/project/build/index.ts +9 -0
- package/dist/project/build/script/buildConf.ts +45 -0
- package/dist/project/build/script/postBuild.ts +21 -0
- package/dist/project/build/utils.ts +92 -0
- package/dist/project/build/vite/plugin/compress.ts +32 -0
- package/dist/project/build/vite/plugin/html.ts +39 -0
- package/dist/project/build/vite/plugin/imagemin.ts +34 -0
- package/dist/project/build/vite/plugin/index.ts +80 -0
- package/dist/project/build/vite/plugin/mock.ts +19 -0
- package/dist/project/build/vite/plugin/pwa.ts +33 -0
- package/dist/project/build/vite/plugin/styleImport.ts +81 -0
- package/dist/project/build/vite/plugin/svgSprite.ts +17 -0
- package/dist/project/build/vite/plugin/theme.ts +100 -0
- package/dist/project/build/vite/plugin/visualizer.ts +17 -0
- package/dist/project/build/vite/proxy.ts +34 -0
- package/dist/project/index.ts +1 -0
- package/dist/project/src/api/sys/model/menuModel.ts +17 -0
- package/dist/project/src/api/sys/model/uploadModel.ts +5 -0
- package/dist/project/src/api/sys/model/userModel.ts +57 -0
- package/dist/project/src/enums/CompTypeEnum.ts +32 -0
- package/dist/project/src/enums/DateTypeEnum.ts +8 -0
- package/dist/project/src/enums/appEnum.ts +58 -0
- package/dist/project/src/enums/breakpointEnum.ts +28 -0
- package/dist/project/src/enums/cacheEnum.ts +39 -0
- package/dist/project/src/enums/exceptionEnum.ts +27 -0
- package/dist/project/src/enums/httpEnum.ts +50 -0
- package/dist/project/src/enums/jeecgEnum.ts +23 -0
- package/dist/project/src/enums/menuEnum.ts +50 -0
- package/dist/project/src/enums/pageEnum.ts +19 -0
- package/dist/project/src/enums/roleEnum.ts +7 -0
- package/dist/project/src/enums/sizeEnum.ts +27 -0
- package/dist/project/types/axios.d.ts +57 -0
- package/dist/project/types/config.d.ts +178 -0
- package/dist/project/types/global.d.ts +92 -0
- package/dist/project/types/index.d.ts +27 -0
- package/dist/project/types/module.d.ts +18 -0
- package/dist/project/types/store.d.ts +59 -0
- package/dist/project/types/utils.d.ts +5 -0
- package/dist/project/types/vue-router.d.ts +47 -0
- package/package.json +25 -2
package/dist/kengic-vue.js
CHANGED
@@ -2462,7 +2462,7 @@ const emptyIcon = {
|
|
2462
2462
|
...t.data
|
2463
2463
|
}, r);
|
2464
2464
|
}
|
2465
|
-
}), version = "0.21.
|
2465
|
+
}), version = "0.21.5-beta.0";
|
2466
2466
|
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
|
2467
2467
|
const freeGlobal$1 = freeGlobal;
|
2468
2468
|
var freeSelf = typeof self == "object" && self && self.Object === Object && self, root = freeGlobal$1 || freeSelf || Function("return this")();
|
@@ -0,0 +1,67 @@
|
|
1
|
+
import { generate } from '@ant-design/colors';
|
2
|
+
|
3
|
+
export const primaryColor = '#1890FF';
|
4
|
+
|
5
|
+
export const darkMode = 'light';
|
6
|
+
|
7
|
+
type Fn = (...arg: any) => any;
|
8
|
+
|
9
|
+
type GenerateTheme = 'default' | 'dark';
|
10
|
+
|
11
|
+
export interface GenerateColorsParams {
|
12
|
+
mixLighten: Fn;
|
13
|
+
mixDarken: Fn;
|
14
|
+
tinycolor: any;
|
15
|
+
color?: string;
|
16
|
+
}
|
17
|
+
|
18
|
+
export function generateAntColors(color: string, theme: GenerateTheme = 'default') {
|
19
|
+
return generate(color, {
|
20
|
+
theme,
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
export function getThemeColors(color?: string) {
|
25
|
+
const tc = color || primaryColor;
|
26
|
+
const lightColors = generateAntColors(tc);
|
27
|
+
const primary = lightColors[5];
|
28
|
+
const modeColors = generateAntColors(primary, 'dark');
|
29
|
+
|
30
|
+
return [...lightColors, ...modeColors];
|
31
|
+
}
|
32
|
+
|
33
|
+
export function generateColors({ color = primaryColor, mixLighten, mixDarken, tinycolor }: GenerateColorsParams) {
|
34
|
+
const arr = new Array(19).fill(0);
|
35
|
+
const lightens = arr.map((_t, i) => {
|
36
|
+
return mixLighten(color, i / 5);
|
37
|
+
});
|
38
|
+
|
39
|
+
const darkens = arr.map((_t, i) => {
|
40
|
+
return mixDarken(color, i / 5);
|
41
|
+
});
|
42
|
+
|
43
|
+
const alphaColors = arr.map((_t, i) => {
|
44
|
+
return tinycolor(color)
|
45
|
+
.setAlpha(i / 20)
|
46
|
+
.toRgbString();
|
47
|
+
});
|
48
|
+
|
49
|
+
const shortAlphaColors = alphaColors.map((item) => item.replace(/\s/g, '').replace(/0\./g, '.'));
|
50
|
+
|
51
|
+
const tinycolorLightens = arr
|
52
|
+
.map((_t, i) => {
|
53
|
+
return tinycolor(color)
|
54
|
+
.lighten(i * 5)
|
55
|
+
.toHexString();
|
56
|
+
})
|
57
|
+
.filter((item) => item !== '#ffffff');
|
58
|
+
|
59
|
+
const tinycolorDarkens = arr
|
60
|
+
.map((_t, i) => {
|
61
|
+
return tinycolor(color)
|
62
|
+
.darken(i * 5)
|
63
|
+
.toHexString();
|
64
|
+
})
|
65
|
+
.filter((item) => item !== '#000000');
|
66
|
+
return [...lightens, ...darkens, ...alphaColors, ...shortAlphaColors, ...tinycolorDarkens, ...tinycolorLightens].filter((item) => !item.includes('-'));
|
67
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { getThemeVariables } from 'ant-design-vue/dist/theme';
|
2
|
+
import { resolve } from 'path';
|
3
|
+
import { generateAntColors, primaryColor } from '../config/themeConfig';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* less global variable
|
7
|
+
*/
|
8
|
+
export function generateModifyVars(dark = false) {
|
9
|
+
const palettes = generateAntColors(primaryColor);
|
10
|
+
const primary = palettes[5];
|
11
|
+
|
12
|
+
const primaryColorObj: Record<string, string> = {};
|
13
|
+
|
14
|
+
for (let index = 0; index < 10; index++) {
|
15
|
+
primaryColorObj[`primary-${index + 1}`] = palettes[index];
|
16
|
+
}
|
17
|
+
|
18
|
+
const modifyVars = getThemeVariables({ dark });
|
19
|
+
return {
|
20
|
+
...modifyVars,
|
21
|
+
// Used for global import to avoid the need to import each style file separately
|
22
|
+
// reference: Avoid repeated references
|
23
|
+
hack: `${modifyVars.hack} @import (reference) "${resolve('src/design/config.less')}";`,
|
24
|
+
'primary-color': primary,
|
25
|
+
...primaryColorObj,
|
26
|
+
'info-color': primary,
|
27
|
+
'processing-color': primary,
|
28
|
+
'success-color': '#55D187', // Success color
|
29
|
+
'error-color': '#ED6F6F', // False color
|
30
|
+
'warning-color': '#EFBD47', // Warning color
|
31
|
+
//'border-color-base': '#EEEEEE',
|
32
|
+
'font-size-base': '14px', // Main font size
|
33
|
+
'border-radius-base': '3px', // Component/float fillet
|
34
|
+
'link-color': primary, // Link color
|
35
|
+
'app-content-background': '#fafafa', // Link color
|
36
|
+
'table-padding-vertical': '12px',
|
37
|
+
'table-padding-horizontal': '12px',
|
38
|
+
};
|
39
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import fs from 'fs-extra';
|
2
|
+
import inquirer from 'inquirer';
|
3
|
+
import path from 'path';
|
4
|
+
|
5
|
+
async function generateIcon() {
|
6
|
+
const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json');
|
7
|
+
|
8
|
+
const raw = await fs.readJSON(path.join(dir, 'collections.json'));
|
9
|
+
|
10
|
+
const collections = Object.entries(raw).map(([id, v]) => ({
|
11
|
+
...(v as any),
|
12
|
+
id,
|
13
|
+
}));
|
14
|
+
|
15
|
+
const choices = collections.map((item) => ({ key: item.id, value: item.id, name: item.name }));
|
16
|
+
|
17
|
+
inquirer
|
18
|
+
.prompt([
|
19
|
+
{
|
20
|
+
type: 'list',
|
21
|
+
name: 'useType',
|
22
|
+
choices: [
|
23
|
+
{ key: 'local', value: 'local', name: 'Local' },
|
24
|
+
{ key: 'onLine', value: 'onLine', name: 'OnLine' },
|
25
|
+
],
|
26
|
+
message: 'How to use icons?',
|
27
|
+
},
|
28
|
+
{
|
29
|
+
type: 'list',
|
30
|
+
name: 'iconSet',
|
31
|
+
choices: choices,
|
32
|
+
message: 'Select the icon set that needs to be generated?',
|
33
|
+
},
|
34
|
+
{
|
35
|
+
type: 'input',
|
36
|
+
name: 'output',
|
37
|
+
message: 'Select the icon set that needs to be generated?',
|
38
|
+
default: 'src/components/Icon/data',
|
39
|
+
},
|
40
|
+
])
|
41
|
+
.then(async (answers) => {
|
42
|
+
const { iconSet, output, useType } = answers;
|
43
|
+
const outputDir = path.resolve(process.cwd(), output);
|
44
|
+
fs.ensureDir(outputDir);
|
45
|
+
const genCollections = collections.filter((item) => [iconSet].includes(item.id));
|
46
|
+
const prefixSet: string[] = [];
|
47
|
+
for (const info of genCollections) {
|
48
|
+
const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`));
|
49
|
+
if (data) {
|
50
|
+
const { prefix } = data;
|
51
|
+
const isLocal = useType === 'local';
|
52
|
+
const icons = Object.keys(data.icons).map((item) => `${isLocal ? prefix + ':' : ''}${item}`);
|
53
|
+
|
54
|
+
await fs.writeFileSync(
|
55
|
+
path.join(output, `icons.data.ts`),
|
56
|
+
`export default ${isLocal ? JSON.stringify(icons) : JSON.stringify({ prefix, icons })}`,
|
57
|
+
);
|
58
|
+
prefixSet.push(prefix);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite'));
|
62
|
+
console.log(`✨` + ' - Icon generated successfully:' + `[${prefixSet}]`);
|
63
|
+
});
|
64
|
+
}
|
65
|
+
|
66
|
+
generateIcon();
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export * from './config/themeConfig';
|
2
|
+
export * from './generate/generateModifyVars';
|
3
|
+
export * from './script/buildConf';
|
4
|
+
export * from './vite/plugin/index';
|
5
|
+
export * from './vite/plugin/index';
|
6
|
+
export * from './vite/proxy';
|
7
|
+
export * from './constant';
|
8
|
+
export * from './getConfigFileName';
|
9
|
+
export * from './utils';
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/**
|
2
|
+
* Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging
|
3
|
+
*/
|
4
|
+
import fs, { writeFileSync } from 'fs-extra';
|
5
|
+
import colors from 'picocolors';
|
6
|
+
import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant';
|
7
|
+
import { getConfigFileName } from '../getConfigFileName';
|
8
|
+
|
9
|
+
import { getEnvConfig, getRootPath } from '../utils';
|
10
|
+
|
11
|
+
interface CreateConfigParams {
|
12
|
+
configName: string;
|
13
|
+
config: any;
|
14
|
+
configFileName?: string;
|
15
|
+
}
|
16
|
+
|
17
|
+
function createConfig(params: CreateConfigParams) {
|
18
|
+
const { configName, config, configFileName } = params;
|
19
|
+
try {
|
20
|
+
const windowConf = `window.${configName}`;
|
21
|
+
// Ensure that the variable will not be modified
|
22
|
+
let configStr = `${windowConf}=${JSON.stringify(config)};`;
|
23
|
+
configStr += `
|
24
|
+
Object.freeze(${windowConf});
|
25
|
+
Object.defineProperty(window, "${configName}", {
|
26
|
+
configurable: false,
|
27
|
+
writable: false,
|
28
|
+
});
|
29
|
+
`.replace(/\s/g, '');
|
30
|
+
|
31
|
+
fs.mkdirp(getRootPath(OUTPUT_DIR));
|
32
|
+
writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr);
|
33
|
+
|
34
|
+
console.log(colors.cyan(`✨`) + ` - configuration file is build successfully:`);
|
35
|
+
console.log(colors.gray(OUTPUT_DIR + '/' + colors.green(configFileName)) + '\n');
|
36
|
+
} catch (error) {
|
37
|
+
console.log(colors.red('configuration file configuration file failed to package:\n' + error));
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
export function runBuildConfig() {
|
42
|
+
const config = getEnvConfig();
|
43
|
+
const configFileName = getConfigFileName(config);
|
44
|
+
createConfig({ config, configName: configFileName, configFileName: GLOB_CONFIG_FILE_NAME });
|
45
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// #!/usr/bin/env node
|
2
|
+
|
3
|
+
import colors from 'picocolors';
|
4
|
+
import { runBuildConfig } from './buildConf';
|
5
|
+
|
6
|
+
export const runBuild = async () => {
|
7
|
+
try {
|
8
|
+
const argvList = process.argv.splice(2);
|
9
|
+
|
10
|
+
// Generate configuration file
|
11
|
+
if (!argvList.includes('disabled-config')) {
|
12
|
+
runBuildConfig();
|
13
|
+
}
|
14
|
+
|
15
|
+
console.log(`✨` + ' - build successfully!');
|
16
|
+
} catch (error) {
|
17
|
+
console.log(colors.red('vite build error:\n' + error));
|
18
|
+
process.exit(1);
|
19
|
+
}
|
20
|
+
};
|
21
|
+
runBuild();
|
@@ -0,0 +1,92 @@
|
|
1
|
+
import dotenv from 'dotenv';
|
2
|
+
import fs from 'fs';
|
3
|
+
import path from 'path';
|
4
|
+
|
5
|
+
export function isDevFn(mode: string): boolean {
|
6
|
+
return mode === 'development';
|
7
|
+
}
|
8
|
+
|
9
|
+
export function isProdFn(mode: string): boolean {
|
10
|
+
return mode === 'production';
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Whether to generate package preview
|
15
|
+
*/
|
16
|
+
export function isReportMode(): boolean {
|
17
|
+
return process.env.REPORT === 'true';
|
18
|
+
}
|
19
|
+
|
20
|
+
// Read all environment variable configuration files to process.env
|
21
|
+
export function wrapperEnv(envConf: Recordable): ViteEnv {
|
22
|
+
const ret: any = {};
|
23
|
+
|
24
|
+
for (const envName of Object.keys(envConf)) {
|
25
|
+
let realName = envConf[envName].replace(/\\n/g, '\n');
|
26
|
+
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
|
27
|
+
|
28
|
+
if (envName === 'VITE_PORT') {
|
29
|
+
realName = Number(realName);
|
30
|
+
}
|
31
|
+
if (envName === 'VITE_PROXY' && realName) {
|
32
|
+
try {
|
33
|
+
realName = JSON.parse(realName.replace(/'/g, '"'));
|
34
|
+
} catch (error) {
|
35
|
+
realName = '';
|
36
|
+
}
|
37
|
+
}
|
38
|
+
ret[envName] = realName;
|
39
|
+
if (typeof realName === 'string') {
|
40
|
+
process.env[envName] = realName;
|
41
|
+
} else if (typeof realName === 'object') {
|
42
|
+
process.env[envName] = JSON.stringify(realName);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return ret;
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* 获取当前环境下生效的配置文件名
|
50
|
+
*/
|
51
|
+
function getConfFiles() {
|
52
|
+
const script = process.env.npm_lifecycle_script;
|
53
|
+
const reg = new RegExp('--mode ([a-z_\\d]+)');
|
54
|
+
const result = reg.exec(script as string) as any;
|
55
|
+
if (result) {
|
56
|
+
const mode = result[1] as string;
|
57
|
+
return ['.env', `.env.${mode}`];
|
58
|
+
}
|
59
|
+
return ['.env', '.env.production'];
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Get the environment variables starting with the specified prefix
|
64
|
+
* @param match prefix
|
65
|
+
* @param confFiles ext
|
66
|
+
*/
|
67
|
+
export function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
|
68
|
+
let envConfig = {};
|
69
|
+
confFiles.forEach((item) => {
|
70
|
+
try {
|
71
|
+
const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
|
72
|
+
envConfig = { ...envConfig, ...env };
|
73
|
+
} catch (e) {
|
74
|
+
console.error(`Error in parsing ${item}`, e);
|
75
|
+
}
|
76
|
+
});
|
77
|
+
const reg = new RegExp(`^(${match})`);
|
78
|
+
Object.keys(envConfig).forEach((key) => {
|
79
|
+
if (!reg.test(key)) {
|
80
|
+
Reflect.deleteProperty(envConfig, key);
|
81
|
+
}
|
82
|
+
});
|
83
|
+
return envConfig;
|
84
|
+
}
|
85
|
+
|
86
|
+
/**
|
87
|
+
* Get user root directory
|
88
|
+
* @param dir file path
|
89
|
+
*/
|
90
|
+
export function getRootPath(...dir: string[]) {
|
91
|
+
return path.resolve(process.cwd(), ...dir);
|
92
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/**
|
2
|
+
* Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated
|
3
|
+
* https://github.com/anncwb/vite-plugin-compression
|
4
|
+
*/
|
5
|
+
import type { PluginOption } from 'vite';
|
6
|
+
import compressPlugin from 'vite-plugin-compression';
|
7
|
+
|
8
|
+
export function configCompressPlugin(compress: 'gzip' | 'brotli' | 'none', deleteOriginFile = false): PluginOption | PluginOption[] {
|
9
|
+
const compressList = compress.split(',');
|
10
|
+
|
11
|
+
const plugins: PluginOption[] = [];
|
12
|
+
|
13
|
+
if (compressList.includes('gzip')) {
|
14
|
+
plugins.push(
|
15
|
+
compressPlugin({
|
16
|
+
ext: '.gz',
|
17
|
+
deleteOriginFile,
|
18
|
+
}),
|
19
|
+
);
|
20
|
+
}
|
21
|
+
|
22
|
+
if (compressList.includes('brotli')) {
|
23
|
+
plugins.push(
|
24
|
+
compressPlugin({
|
25
|
+
ext: '.br',
|
26
|
+
algorithm: 'brotliCompress',
|
27
|
+
deleteOriginFile,
|
28
|
+
}),
|
29
|
+
);
|
30
|
+
}
|
31
|
+
return plugins;
|
32
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/**
|
2
|
+
* Plugin to minimize and use ejs template syntax in index.html.
|
3
|
+
* https://github.com/anncwb/vite-plugin-html
|
4
|
+
*/
|
5
|
+
import type { PluginOption } from 'vite';
|
6
|
+
import { createHtmlPlugin } from 'vite-plugin-html';
|
7
|
+
import { GLOB_CONFIG_FILE_NAME } from '../../constant';
|
8
|
+
|
9
|
+
export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) {
|
10
|
+
const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env;
|
11
|
+
|
12
|
+
const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`;
|
13
|
+
|
14
|
+
const getAppConfigSrc = () => {
|
15
|
+
return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${new Date().getTime()}`;
|
16
|
+
};
|
17
|
+
|
18
|
+
const htmlPlugin: PluginOption[] = createHtmlPlugin({
|
19
|
+
minify: isBuild,
|
20
|
+
inject: {
|
21
|
+
// Inject data into ejs template
|
22
|
+
data: {
|
23
|
+
title: VITE_GLOB_APP_TITLE,
|
24
|
+
},
|
25
|
+
// Embed the generated app.config.js file
|
26
|
+
tags: isBuild
|
27
|
+
? [
|
28
|
+
{
|
29
|
+
tag: 'script',
|
30
|
+
attrs: {
|
31
|
+
src: getAppConfigSrc(),
|
32
|
+
},
|
33
|
+
},
|
34
|
+
]
|
35
|
+
: [],
|
36
|
+
},
|
37
|
+
});
|
38
|
+
return htmlPlugin;
|
39
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
// Image resource files used to compress the output of the production environment
|
2
|
+
// https://github.com/anncwb/vite-plugin-imagemin
|
3
|
+
import viteImagemin from 'vite-plugin-imagemin';
|
4
|
+
|
5
|
+
export function configImageminPlugin() {
|
6
|
+
const plugin = viteImagemin({
|
7
|
+
gifsicle: {
|
8
|
+
optimizationLevel: 7,
|
9
|
+
interlaced: false,
|
10
|
+
},
|
11
|
+
optipng: {
|
12
|
+
optimizationLevel: 7,
|
13
|
+
},
|
14
|
+
mozjpeg: {
|
15
|
+
quality: 20,
|
16
|
+
},
|
17
|
+
pngquant: {
|
18
|
+
quality: [0.8, 0.9],
|
19
|
+
speed: 4,
|
20
|
+
},
|
21
|
+
svgo: {
|
22
|
+
plugins: [
|
23
|
+
{
|
24
|
+
name: 'removeViewBox',
|
25
|
+
},
|
26
|
+
{
|
27
|
+
name: 'removeEmptyAttrs',
|
28
|
+
active: false,
|
29
|
+
},
|
30
|
+
],
|
31
|
+
},
|
32
|
+
});
|
33
|
+
return plugin;
|
34
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import legacy from '@vitejs/plugin-legacy';
|
2
|
+
import vue from '@vitejs/plugin-vue';
|
3
|
+
import vueJsx from '@vitejs/plugin-vue-jsx';
|
4
|
+
import { PluginOption } from 'vite';
|
5
|
+
import VitePluginCertificate from 'vite-plugin-mkcert';
|
6
|
+
import OptimizationPersist from 'vite-plugin-optimize-persist';
|
7
|
+
import PkgConfig from 'vite-plugin-package-config';
|
8
|
+
import purgeIcons from 'vite-plugin-purge-icons';
|
9
|
+
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
|
10
|
+
import windiCSS from 'vite-plugin-windicss';
|
11
|
+
import { configCompressPlugin } from './compress';
|
12
|
+
import { configHtmlPlugin } from './html';
|
13
|
+
import { configImageminPlugin } from './imagemin';
|
14
|
+
import { configMockPlugin } from './mock';
|
15
|
+
import { configPwaConfig } from './pwa';
|
16
|
+
import { configStyleImportPlugin } from './styleImport';
|
17
|
+
import { configSvgIconsPlugin } from './svgSprite';
|
18
|
+
import { configThemePlugin } from './theme';
|
19
|
+
import { configVisualizerConfig } from './visualizer';
|
20
|
+
|
21
|
+
export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
|
22
|
+
const { VITE_USE_IMAGEMIN, VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
|
23
|
+
|
24
|
+
const vitePlugins: (PluginOption | PluginOption[])[] = [
|
25
|
+
// have to
|
26
|
+
vue(),
|
27
|
+
// have to
|
28
|
+
vueJsx(),
|
29
|
+
// support name
|
30
|
+
vueSetupExtend(),
|
31
|
+
// @ts-ignore
|
32
|
+
VitePluginCertificate({
|
33
|
+
source: 'coding',
|
34
|
+
}),
|
35
|
+
];
|
36
|
+
|
37
|
+
// vite-plugin-windicss
|
38
|
+
vitePlugins.push(windiCSS());
|
39
|
+
|
40
|
+
// @vitejs/plugin-legacy
|
41
|
+
VITE_LEGACY && isBuild && vitePlugins.push(legacy());
|
42
|
+
|
43
|
+
// vite-plugin-html
|
44
|
+
vitePlugins.push(configHtmlPlugin(viteEnv, isBuild));
|
45
|
+
|
46
|
+
// vite-plugin-svg-icons
|
47
|
+
vitePlugins.push(configSvgIconsPlugin(isBuild));
|
48
|
+
|
49
|
+
// vite-plugin-mock
|
50
|
+
VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild));
|
51
|
+
|
52
|
+
// vite-plugin-purge-icons
|
53
|
+
vitePlugins.push(purgeIcons());
|
54
|
+
|
55
|
+
// vite-plugin-style-import
|
56
|
+
vitePlugins.push(configStyleImportPlugin(isBuild));
|
57
|
+
|
58
|
+
// rollup-plugin-visualizer
|
59
|
+
vitePlugins.push(configVisualizerConfig());
|
60
|
+
|
61
|
+
// vite-plugin-theme
|
62
|
+
vitePlugins.push(configThemePlugin(isBuild));
|
63
|
+
|
64
|
+
// The following plugins only work in the production environment
|
65
|
+
if (isBuild) {
|
66
|
+
// vite-plugin-imagemin
|
67
|
+
VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin());
|
68
|
+
|
69
|
+
// rollup-plugin-gzip
|
70
|
+
vitePlugins.push(configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE));
|
71
|
+
|
72
|
+
// vite-plugin-pwa
|
73
|
+
vitePlugins.push(configPwaConfig(viteEnv));
|
74
|
+
}
|
75
|
+
|
76
|
+
//vite-plugin-theme【解决vite首次打开界面加载慢问题】
|
77
|
+
vitePlugins.push(PkgConfig());
|
78
|
+
vitePlugins.push(OptimizationPersist());
|
79
|
+
return vitePlugins;
|
80
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* Mock plugin for development and production.
|
3
|
+
* https://github.com/anncwb/vite-plugin-mock
|
4
|
+
*/
|
5
|
+
import { viteMockServe } from 'vite-plugin-mock';
|
6
|
+
|
7
|
+
export function configMockPlugin(isBuild: boolean) {
|
8
|
+
return viteMockServe({
|
9
|
+
ignore: /^\_/,
|
10
|
+
mockPath: 'mock',
|
11
|
+
localEnabled: !isBuild,
|
12
|
+
prodEnabled: isBuild,
|
13
|
+
injectCode: `
|
14
|
+
import { setupProdMockServer } from '../mock/_createProductionServer';
|
15
|
+
|
16
|
+
setupProdMockServer();
|
17
|
+
`,
|
18
|
+
});
|
19
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
/**
|
2
|
+
* Zero-config PWA for Vite
|
3
|
+
* https://github.com/antfu/vite-plugin-pwa
|
4
|
+
*/
|
5
|
+
import { VitePWA } from 'vite-plugin-pwa';
|
6
|
+
|
7
|
+
export function configPwaConfig(env: ViteEnv) {
|
8
|
+
const { VITE_USE_PWA, VITE_GLOB_APP_TITLE, VITE_GLOB_APP_SHORT_NAME } = env;
|
9
|
+
|
10
|
+
if (VITE_USE_PWA) {
|
11
|
+
// vite-plugin-pwa
|
12
|
+
const pwaPlugin = VitePWA({
|
13
|
+
manifest: {
|
14
|
+
name: VITE_GLOB_APP_TITLE,
|
15
|
+
short_name: VITE_GLOB_APP_SHORT_NAME,
|
16
|
+
icons: [
|
17
|
+
{
|
18
|
+
src: './resource/img/pwa-192x192.png',
|
19
|
+
sizes: '192x192',
|
20
|
+
type: 'image/png',
|
21
|
+
},
|
22
|
+
{
|
23
|
+
src: './resource/img/pwa-512x512.png',
|
24
|
+
sizes: '512x512',
|
25
|
+
type: 'image/png',
|
26
|
+
},
|
27
|
+
],
|
28
|
+
},
|
29
|
+
});
|
30
|
+
return pwaPlugin;
|
31
|
+
}
|
32
|
+
return [];
|
33
|
+
}
|