From 52e538aa4374e330f6165a8e59a5dd7bf739b25b Mon Sep 17 00:00:00 2001 From: DevDengChao <2325690622@qq.com> Date: Thu, 5 Mar 2026 15:31:02 +0800 Subject: [PATCH] fix(router): auto-reload on chunk load failure after rebuild Add two layers of error handling for stale chunk imports: - `vite:preloadError` listener in main.ts for Vite preload failures - `router.onError` in router/index.ts for dynamic import failures during navigation Co-Authored-By: Claude Opus 4.6 --- src/main.ts | 6 ++++++ src/router/index.ts | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main.ts b/src/main.ts index fcfd78096..6e7a297d5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -47,6 +47,12 @@ import { setupWangEditorPlugin } from '@/views/bpm/model/form/PrintTemplate' import print from 'vue3-print-nb' // 打印插件 +// 处理 Vite 预加载模块失败(如重新构建后 chunk 哈希变化),自动刷新页面 +window.addEventListener('vite:preloadError', (event) => { + event.preventDefault() + window.location.reload() +}) + // 创建实例 const setupAll = async () => { const app = createApp(App) diff --git a/src/router/index.ts b/src/router/index.ts index fa3b9752b..7759eadb3 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -19,6 +19,16 @@ const router = createRouter({ } }) +// 处理动态导入失败(如重新构建后 chunk 哈希变化),自动跳转到目标页面 +router.onError((error, to) => { + if ( + error.message.includes('Failed to fetch dynamically imported module') || + error.message.includes('Importing a module script failed') + ) { + window.location.assign(to.fullPath) + } +}) + export const resetRouter = (): void => { const resetWhiteNameList = ['Redirect', 'RedirectRoot', 'Login', 'NoFound', 'Home'] router.getRoutes().forEach((route) => {