我在Taro项目里配置了分包,主包和子包都写好了,但一进分包页面就报“页面不存在”错误。
app.config.ts 里是这么配的:
export default {
pages: ['pages/index/index'],
subPackages: [
{
root: 'packageA',
pages: ['pages/detail/detail']
}
]
}
文件路径也确认是对的:src/packageA/pages/detail/detail,但真机预览还是打不开,是不是哪里漏了?
app.config.ts里subPackages的pages数组里写的路径,必须是相对于分包根目录的路径,而不是项目根目录的完整路径。你写的这个配置:
问题就出在
pages: ['pages/detail/detail']这一行。因为root: 'packageA'表示分包的根目录是packageA,那 Taro 编译时会去src/packageA/目录下找页面,而pages/detail/detail是相对于packageA的子路径,所以它实际会去找src/packageA/pages/detail/detail—— 这看起来没问题,但小程序原生要求分包页面路径不能包含pages/这个固定前缀,必须从pages目录下的第一级开始写。也就是说,你写的
'pages/detail/detail'实际会被拼成小程序里的packageA/pages/detail/detail,但小程序识别分包页面时,会自动加上packageA/前缀,然后拼接你写的路径,结果就变成了packageA/pages/detail/detail,但小程序实际注册的页面路径是packageA/detail/detail,所以路径不匹配,就报“页面不存在”。✅ 正确写法是去掉
pages/前缀,改成:这样 Taro 编译时会把
src/packageA/pages/detail/detail注册为小程序的packageA/detail/detail路径,跟原生行为一致。另外再检查两个容易忽略的点:
1. 确保
src/packageA/pages/detail/detail.tsx(或.vue/.jsx)里有正确的config导出,哪怕空对象也得有,比如:2. 小程序原生要求分包页面必须显式注册,不能靠自动扫描,所以一定要在
subPackages里声明。你虽然写了,但路径错了,所以没注册上。再补充一个坑:如果你用的是 Taro 3.6+,还建议检查下
config里的pages和subPackages是否被defineConfig包裹(虽然不是必须,但推荐),比如:最后提醒一句:改完配置后一定要重启 dev 服务,Taro 的热更新有时不会重扫分包结构,尤其是分包路径变更的时候,不重启容易缓存旧的编译结果,导致你以为改了没生效。
我之前就踩过这个坑,改完路径没重启,调试了俩小时……