项目部署到 /shop/ 之后,导航里的链接一点就跳到 https://example.com/goods 并 404,首页反而一切正常。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

<router-link :to="{ name: 'goods', params: { id } }">
<!-- 不要写 to='/goods/1' -->

router-link 的 to 写成以斜杠开头的字符串,会被当成根路径解析,router 的 base 不参与拼接。开发环境跑在根目录,所以这个问题一直没暴露。这一点先确认清楚,后面就不用反复试。

「router-link 绝对路径」这类改动最怕改一半,回滚脚本先准备好,再动生产。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

具体做法是,把 to 换成路由 name 加 params,让 router 自己拼路径;必须写路径时用相对路径,或者拼上 BASE_URL;全局搜 to 以斜杠开头的写法,一条条改,别指望构建工具兜底。

改完照着核一遍,在 /shop/ 下点导航,地址保持在 /shop 前缀内,不再跳根域。

作者 9823189