9/4更新
今天,统一的问题又出现在了window电脑上,所以排除代码配置、网络、配置问题
最终定位到vite.config.ts中的代理上
rewrite: (path: string) => path.replace(/^\/api/, '/')
打印出来一看
rewrite: (path: string) => {
console.log(path, path.replace(/^\/api/, '/'))
return path.replace(/^\/api/, '')
}
确实是会多出一个斜杠,多了个斜杠请求发送到后端服务器上,自然会找不到此方法
那为什么会有时在mac上是正常,Windows是404;或者有时在window正常,mac缺是404
1. 不同操作系统的差异
-
mac 可能用的 node 版本 / dev server 对
//自动归一化成/。 -
windows 上的 node 版本没做归一化,直接发出
//。 -
反过来也可能出现,因为行为取决于 代理库的实现 + 目标服务的容忍度。
2. 缓存 / 热更新影响
Vite 热更新时,有时候代理缓存了正确的 URL(单斜杠),有时候拼了双斜杠,所以会看到“时好时坏”。
———————-分割线———————
问题背景:环境一致的假象
作为一名开发者,我们都信奉一个真理:版本锁定的代码在任何环境下的表现都应该一致。然而,最近我遇到了一个令人困惑的问题——完全相同的Vite项目代码,在两台电脑上表现截然不同。
在一台Windows电脑上,前端应用完美运行,API请求正常响应。而在我的MacBook上,却持续收到404 Not Found错误,尽管代码、依赖版本甚至Vite配置都完全一致。
这看似简单的问题,却引发了一场长达数小时的深度排查之旅。
问题现象:相同的代码,不同的表现
在Mac上运行项目后,浏览器开发者工具显示API请求返回404:
Request URL: http://localhost:8080/api/xxx Status Code: 404 Not Found Remote Address: 127.0.0.1:8080
而奇怪的是,另一台电脑上同样的请求却能正常返回200。
深度排查过程
1:初步假设与验证
首先,我排除了最明显的可能性:
-
✅ 代码确实完全一致(Git验证)
-
✅ 网络连通性正常(ping测试)
-
✅ 后端服务正常运行(另一台电脑可访问)
2:网络层排查
命令检查端口占用情况:确认没有端口没有被占用
3:Vite代理配置验证(这步可以跳过,因为是一套代码)
4:清除浏览器缓存,并开启浏览器network中的disable cache
经过上面4步还是不行,那么就只有一种问题了,依赖的缓存问题,因为,电脑默认是node14,这个项目用的是node22,依稀记得安装这个项目的依赖时,一开始是用默认的node14,装了一次,然后又切换到node22装了一次,装之前没有清空之前的node_modules目录,
所以尝试清空node_modules并重新安装依赖,问题解决!!!
原因分析
某些依赖包在不同平台上的安装版本或编译结果存在差异,导致Vite代理中间件行为不一致。
虽然package-lock.json锁定了版本号,但:
-
二进制依赖在不同平台需要重新编译
-
某些依赖可能存在平台特定的代码路径
-
安装过程中的缓存或部分更新可能导致不一致
Web前端(W3Cways.com) - Web前端学习之路