fix: 消除前端循环分块导致的骨架屏

This commit is contained in:
134 2026-09-23 11:35:47 +08:00
parent 6b0bf59e74
commit d32494ca12

View File

@ -11,15 +11,21 @@ export default defineConfig({
cssCodeSplit: false, cssCodeSplit: false,
modulePreload: false, modulePreload: false,
rollupOptions: { rollupOptions: {
onwarn(warning, warn) {
// Manually splitting packages that depend on each other can create a circular chunk graph.
// That graph built successfully in the past but crashed before React mounted, leaving only
// the static skeleton on screen. Treat it as a release-blocking error from now on.
if (warning.code === 'CIRCULAR_CHUNK') {
throw new Error(`Circular production chunk: ${warning.message}`)
}
warn(warning)
},
output: { output: {
entryFileNames: 'assets/[name]-[hash].js', entryFileNames: 'assets/[name]-[hash].js',
chunkFileNames(chunkInfo) { chunkFileNames(chunkInfo) {
if (chunkInfo.name === 'app-shell') return 'assets/app-shell-[hash].js' if (chunkInfo.name === 'app-shell') return 'assets/app-shell-[hash].js'
if (chunkInfo.name === 'app-api') return 'assets/app-api-[hash].js' if (chunkInfo.name === 'app-api') return 'assets/app-api-[hash].js'
if (chunkInfo.name === 'react-vendor') return 'assets/react-vendor-[hash].js' if (chunkInfo.name === 'vendor') return 'assets/vendor-[hash].js'
if (chunkInfo.name === 'antd-vendor') return 'assets/antd-vendor-[hash].js'
if (chunkInfo.name === 'charts-vendor') return 'assets/charts-vendor-[hash].js'
if (chunkInfo.name === 'data-vendor') return 'assets/data-vendor-[hash].js'
return 'assets/[name]-[hash].js' return 'assets/[name]-[hash].js'
}, },
assetFileNames(assetInfo) { assetFileNames(assetInfo) {
@ -32,41 +38,8 @@ export default defineConfig({
const normalizedId = id.replace(/\\/g, '/') const normalizedId = id.replace(/\\/g, '/')
if (normalizedId.includes('node_modules') || normalizedId.includes('/.vite/deps/')) { if (normalizedId.includes('node_modules') || normalizedId.includes('/.vite/deps/')) {
if ( // Keep mutually dependent third-party packages in one chunk. React, Ant Design,
normalizedId.includes('/react/') || // charts and Cube clients share runtime helpers and cannot be split safely by path.
normalizedId.includes('react-dom') ||
normalizedId.includes('react-router') ||
normalizedId.includes('@remix-run/router') ||
normalizedId.includes('react_jsx-runtime') ||
normalizedId.includes('scheduler')
) {
return 'react-vendor'
}
if (
normalizedId.includes('antd') ||
normalizedId.includes('@ant-design') ||
normalizedId.includes('@ant-design/pro-components') ||
normalizedId.includes('/rc-')
) {
return 'antd-vendor'
}
if (
normalizedId.includes('echarts') ||
normalizedId.includes('zrender') ||
normalizedId.includes('recharts')
) {
return 'charts-vendor'
}
if (
normalizedId.includes('axios') ||
normalizedId.includes('@cubejs-client')
) {
return 'data-vendor'
}
return 'vendor' return 'vendor'
} }