Files
wukuang/apps/lcdp/vite.config.manual-chunks.ts
2026-05-23 14:05:22 +08:00

111 lines
4.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Vite 构建分包策略
* 优化:减少 chunk 数量,避免首屏加载排队
* 目标:控制在 6 个主要 chunk 以内
*/
export function createManualChunks(id: string): string | undefined {
// Monaco Editor - 外部依赖,不打包
if (id.includes('monaco-editor')) {
return undefined;
}
// node_modules 依赖
if (id.includes('node_modules')) {
// BPM 包 - 体积大,单独分包,动态加载
if (id.includes('@lingshu/bpm-page') || id.includes('@lingshu/bpm-components')) {
return 'vendor-bpm';
}
// Vant / 移动端组件库 - 仅移动端使用,单独分包按需加载
if (id.includes('vant-cisdi') || id.includes('vant/') || id.includes('@minmetals-ui/mobile-biz-components')) {
return 'vendor-mobile';
}
// VXE Table 相关 - 列表页需要,可延迟加载
if (id.includes('vxe-table') || id.includes('vxe-pc-ui') || id.includes('@vxe-ui')) {
return 'vendor-vxe';
}
// Echarts - 图表页需要,可延迟加载
if (id.includes('echarts') || id.includes('zrender')) {
return 'vendor-echarts';
}
// ERD Editor - 仅 modeling 模块使用,单独分包按需加载
if (id.includes('@dineug/erd-editor')) {
return 'vendor-erd-editor';
}
// @minmetals-ui/biz-components 和 @minmetals-ui/pro-components 体积大,单独分包延迟加载
if (id.includes('@minmetals-ui/biz-components') || id.includes('@minmetals-ui/pro-components')) {
return 'vendor-minmetals';
}
// 其他所有第三方库合并到 vendor(包括 Element Plus 等)
return 'vendor';
}
// 内部 workspace packages - 按包拆分,避免单文件过大
if (id.includes('/packages/')) {
if (id.includes('packages/form-designer')) {
// widget-mobile 单独分包,避免 vant/mobile-biz-components 被首屏加载
if (id.includes('/widget-mobile/') || id.includes('/page-load/mobile.vue')) {
// 以下 widget-mobile 子路径的文件不依赖 vant / @minmetals-ui/mobile-biz-components
// 且被 PC 运行时路径静态引用。若一并放入 pkg-form-designer-mobile
// 会使 pkg-form-designer 在 PC 路由下产生对 mobile chunk 的静态依赖,
// 导致浏览器提前加载 pkg-form-designer-mobile。保留在 pkg-form-designer 中。
if (
// 纯类型/枚举重导出
id.includes('/widget-mobile/config/WidgetType')
// 样式常量(无 vant 依赖)
|| id.includes('/widget-mobile/config/widget-constants/')
// 高级筛选字段类型常量
|| id.includes('/widget-mobile/config/widget/advanced-filter/types')
// 移动端多语言模块(仅 i18n 注册,无 vant 依赖)
|| id.includes('/widget-mobile/locales/')
// widget-mobile 类型定义
|| id.includes('/widget-mobile/types/')
// composables 下的纯类型重导出
|| id.includes('/widget-mobile/composables/list-filter/types')
|| id.includes('/widget-mobile/composables/list-fetch/types')
) {
return 'pkg-form-designer';
}
return 'pkg-form-designer-mobile';
}
return 'pkg-form-designer';
}
if (id.includes('packages/business-components')) {
// 按功能域拆分 business-components,减少单 chunk 评估时间
if (id.includes('/widget/approve') || id.includes('/widget/bpm')) {
return 'pkg-biz-approve';
}
if (id.includes('/widget/list') || id.includes('/widget/table') || id.includes('/widget/grid')) {
return 'pkg-biz-list';
}
if (id.includes('/widget/person') || id.includes('/widget/org') || id.includes('/widget/dept') || id.includes('/widget/biz-org')) {
return 'pkg-biz-org';
}
if (id.includes('/widget/attachment') || id.includes('/widget/image') || id.includes('/widget/file')) {
return 'pkg-biz-attachment';
}
return 'pkg-business-components';
}
return 'pkg-shared';
}
// app 源码公共组件 - 这些组件同时被同步入口和动态路由 chunk 引用,
// Rollup 会将其自动提取为共享 chunk,产生零碎 CSS 文件(如 dialog-*.css、del-dialog-*.css)。
// 显式分配到 vendor,使其 CSS 合并到 vendor-*.css,减少首屏 CSS 请求数。
if (
id.includes('/components/common/dialog')
|| id.includes('/components/business-common/del-dialog')
) {
return 'vendor';
}
// app 其他源码 - 不指定 chunk,让 Vite 自动处理(会合并到 index.js)
return undefined;
}