perf(P22PROD1-1,P22PROD1-2): 路由懒加载与Vite分包消除大包warning
这个提交包含在:
@@ -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": {
|
||||
|
||||
在新工单中引用
屏蔽一个用户