perf(P22PROD1-1,P22PROD1-2): 路由懒加载与Vite分包消除大包warning

这个提交包含在:
2026-03-12 21:48:47 +08:00
父节点 af42be14f4
当前提交 c846bb203c
共修改 27 个文件,包含 204 行新增和 47 行删除
+89
查看文件
@@ -2,6 +2,86 @@ import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { VitePWA } from "vite-plugin-pwa";
const PAGE_CHUNK_PATTERNS = {
"page-travel": ["TravelRequestsPage"],
"page-assets": ["AssetRegistryPage", "InventoryChecksPage"],
"page-procurement": ["PurchaseRequestsPage"],
"page-workflow": ["WorkflowTasksPage", "WorkflowTaskDetailPage"],
"page-system": [
"AuditLogsPage",
"ApprovalRulesPage",
"DelegationsPage",
"DepartmentsPage",
"ErpIntegrationPage",
"FeatureFlagsPage",
"InvoicePoolPage",
"LeaveRequestPage",
"MasterDataPage",
"NotificationChannelsPage",
"NotificationsPage",
"ReimbursementDetailPage",
"ReimbursementsPage",
"UserManagementPage",
],
"page-mobile": ["MobileCapturePage", "MobileAssetScanPage", "MobileApprovalsPage"],
} as const;
function resolveManualChunk(id: string) {
if (id.includes("node_modules")) {
if (["react", "react-dom", "react-router-dom"].some((pkg) => id.includes(`/node_modules/${pkg}/`))) {
return "vendor-react";
}
if (id.includes("/node_modules/@tanstack/react-query/")) {
return "vendor-query";
}
if (id.includes("/node_modules/@zxing/browser/")) {
return "vendor-scan";
}
if (
id.includes("/node_modules/@radix-ui/") ||
id.includes("/node_modules/class-variance-authority/") ||
id.includes("/node_modules/clsx/") ||
id.includes("/node_modules/tailwind-merge/") ||
id.includes("/node_modules/sonner/")
) {
return "vendor-ui";
}
return undefined;
}
if (
id.includes("/src/api/http.ts") ||
id.includes("/src/api/types.ts") ||
id.includes("/src/api/errorMessages.ts") ||
id.includes("/src/api/auth.ts") ||
id.includes("/src/auth/") ||
id.includes("/src/components/common/") ||
id.includes("/src/hooks/") ||
id.includes("/src/lib/") ||
id.includes("/src/pwa.ts")
) {
return "app-core";
}
if (id.includes("/src/api/masterData.ts") || id.includes("/src/components/ai/")) {
return "app-domain-shared";
}
for (const [chunkName, pageNames] of Object.entries(PAGE_CHUNK_PATTERNS)) {
for (const pageName of pageNames) {
if (id.includes(`/src/router/lazy/${pageName}.ts`)) {
return chunkName;
}
}
}
return undefined;
}
export default defineConfig({
plugins: [
react(),
@@ -89,6 +169,15 @@ export default defineConfig({
},
}),
],
build: {
rollupOptions: {
output: {
manualChunks(id) {
return resolveManualChunk(id);
},
},
},
},
server: {
proxy: {
"/api": {