Vite开发服务器与构建预览模式下React路由行为不一致问题排查求助
Vite开发服务器与构建预览模式下React路由行为不一致问题排查求助
大家好,我最近碰到了一个特别头疼的问题——Vite开发服务器(用vite命令启动)和构建后的生产模式(vite build)在React路由的表现上完全不一致,现在完全摸不着排查方向,想请教下有没有大佬能给点思路,到底是代码问题、配置问题还是其他潜在原因导致的?
我目前的理解是,开发服务器和构建模式的核心差异只是打包工具用了Rollup,但不管哪种模式,转译相关的工作都是esbuild在处理,按道理不该影响路由逻辑才对?
具体的问题现象有两个:
- 路由钩子表现不一致:在开发服务器中,通过
push方法修改URL时,useHistory钩子不会触发组件重渲染,但useLocation钩子是正常工作的;而构建后的生产模式下,useHistory触发URL变更后组件能正常重渲染。 - 带URL参数的组件行为异常:开发服务器中,某个依赖URL参数的组件会立刻卸载自己,导致页面跳转;但构建后的生产模式下这个组件工作完全正常。
我用到的相关包版本如下:
history: ^4.10.1react: ^18.2.0react-router-dom: ^5.2.0vite: ^4.4.9
我的vite.config.ts配置代码如下:
export default defineConfig(({ command, mode }) => { // Load env file based on `mode` in the current working directory. // Set the third parameter to '' to load all env regardless of the `VITE_` prefix. const env = loadEnv(mode, process.cwd(), "") return { resolve: { alias: { "../../theme.config": path.join(__dirname, "src/semantic-ui/theme.config"), yup: "yup/index.js", }, }, plugins: [ react(), viteTsconfigPaths(), nodePolyfills(), ], build: { outDir: "build", }, server: { host: env.HOST, port: Number(env.PORT ?? 5000), }, css: { preprocessorOptions: { less: { math: "always", }, }, }, } })
补充下环境信息:我的开发系统是MacOS Ventura 13.5.2,另外在我们CI的Alpine Linux镜像上执行vite build后,所有功能都是正常的,只有本地开发服务器会出现这些问题。
真心希望有人能指点下我该从哪里开始排查,比如有没有可能是依赖版本兼容问题?Vite的某个配置项影响了路由?或者是React Router在开发模式下的特殊行为?
备注:内容来源于stack exchange,提问作者Kyle S
相关产品推荐
相关产品推荐

