perf(web): 降低生产构建内存峰值,并启用 CI 低内存打包模式
关闭按需 Element Plus 样式与构建期 dts、限制 rollup 并行、CI 跳过 gzip; 新增 npm run build:ci,供 Drone 在小内存机器上打包。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
df6ce133dd
commit
9d93a373ae
8 files changed
+55
-27
No files matched your search
@@ -1,20 +1,21 @@
|
||||
import AutoImport from 'unplugin-auto-import/vite';
|
||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
|
||||
|
||||
export default (path: any) => {
|
||||
export default (path: any, isBuild = false) => {
|
||||
return AutoImport({
|
||||
// 自动导入 Vue 相关函数
|
||||
imports: ['vue', 'vue-router', '@vueuse/core', 'pinia'],
|
||||
eslintrc: {
|
||||
enabled: true,
|
||||
// 生产构建不重写 eslint 全局声明,避免每次打包全量扫描
|
||||
enabled: !isBuild,
|
||||
filepath: './.eslintrc-auto-import.json',
|
||||
globalsPropValue: true
|
||||
},
|
||||
resolvers: [
|
||||
// 自动导入 Element Plus 相关函数ElMessage, ElMessageBox... (带样式)
|
||||
ElementPlusResolver()
|
||||
ElementPlusResolver({ importStyle: false })
|
||||
],
|
||||
vueTemplate: true, // 是否在 vue 模板中自动导入
|
||||
dts: path.resolve(path.resolve(__dirname, '../../src'), 'types', 'auto-imports.d.ts')
|
||||
dts: isBuild ? false : path.resolve(path.resolve(__dirname, '../../src'), 'types', 'auto-imports.d.ts')
|
||||
});
|
||||
};
|
||||
@@ -2,16 +2,18 @@ import Components from 'unplugin-vue-components/vite';
|
||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
|
||||
import IconsResolver from 'unplugin-icons/resolver';
|
||||
|
||||
export default (path: any) => {
|
||||
export default (path: any, isBuild = false) => {
|
||||
return Components({
|
||||
resolvers: [
|
||||
// 自动导入 Element Plus 组件
|
||||
ElementPlusResolver(),
|
||||
// 全局已引入 element-plus/dist/index.css,关闭按需样式,减少打包模块数
|
||||
ElementPlusResolver({ importStyle: false }),
|
||||
// 自动注册图标组件
|
||||
IconsResolver({
|
||||
enabledCollections: ['ep']
|
||||
})
|
||||
],
|
||||
dts: path.resolve(path.resolve(__dirname, '../../src'), 'types', 'components.d.ts')
|
||||
// 生产构建不重写声明文件,避免把全部组件信息留在内存里
|
||||
dts: isBuild ? false : path.resolve(path.resolve(__dirname, '../../src'), 'types', 'components.d.ts')
|
||||
});
|
||||
};
|
||||
@@ -1,16 +1,20 @@
|
||||
import compression from 'vite-plugin-compression';
|
||||
|
||||
export default (env: any) => {
|
||||
const { VITE_BUILD_COMPRESS } = env;
|
||||
// CI 可通过空值或空格关闭:VITE_BUILD_COMPRESS=
|
||||
const raw = String(env?.VITE_BUILD_COMPRESS ?? '').trim();
|
||||
const plugin: any[] = [];
|
||||
if (VITE_BUILD_COMPRESS) {
|
||||
const compressList = VITE_BUILD_COMPRESS.split(',');
|
||||
if (raw) {
|
||||
const compressList = raw.split(',').map((s: string) => s.trim()).filter(Boolean);
|
||||
if (compressList.includes('gzip')) {
|
||||
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
|
||||
plugin.push(
|
||||
compression({
|
||||
ext: '.gz',
|
||||
deleteOriginFile: false
|
||||
deleteOriginFile: false,
|
||||
// 小于 10KB 的分包压缩收益很小,跳过可明显缩短收尾时间
|
||||
threshold: 10 * 1024,
|
||||
verbose: false
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import Icons from 'unplugin-icons/vite';
|
||||
|
||||
export default () => {
|
||||
export default (isBuild = false) => {
|
||||
return Icons({
|
||||
// 自动安装图标库
|
||||
autoInstall: true
|
||||
// 构建时禁止临时 npm install,避免打包过程访问外网卡住
|
||||
autoInstall: !isBuild
|
||||
});
|
||||
};
|
||||
@@ -1,5 +1,4 @@
|
||||
import vue from '@vitejs/plugin-vue';
|
||||
import vueDevTools from 'vite-plugin-vue-devtools'; // 临时禁用以解决localStorage兼容性问题
|
||||
|
||||
import createUnoCss from './unocss';
|
||||
import createAutoImport from './auto-import';
|
||||
@@ -13,12 +12,11 @@ import path from 'path';
|
||||
export default (viteEnv: any, isBuild = false): [] => {
|
||||
const vitePlugins: any = [];
|
||||
vitePlugins.push(vue());
|
||||
// vitePlugins.push(vueDevTools()); // 禁用以解决localStorage兼容性问题
|
||||
vitePlugins.push(createUnoCss());
|
||||
vitePlugins.push(createAutoImport(path));
|
||||
vitePlugins.push(createComponents(path));
|
||||
vitePlugins.push(createAutoImport(path, isBuild));
|
||||
vitePlugins.push(createComponents(path, isBuild));
|
||||
vitePlugins.push(createCompression(viteEnv));
|
||||
vitePlugins.push(createIcons());
|
||||
vitePlugins.push(createIcons(isBuild));
|
||||
vitePlugins.push(createSvgIconsPlugin(path));
|
||||
vitePlugins.push(createSetupExtend());
|
||||
return vitePlugins;
|
||||
|
||||
Reference in new issue
Block a user