如何解决AWS Amplify部署后Expo linking配置失效问题
Expo Linking在AWS Amplify线上环境失效的常见原因和解决方案
1. Linking前缀与线上域名不匹配
Linking.makeUrl('/')仅会生成本地开发环境的地址(如http://localhost:19006/),无法自动识别AWS Amplify的线上域名,导致路由匹配失败。
你需要手动将线上域名添加到Linking配置的prefixes数组中:
export default { // 新增所有线上部署的域名到数组 prefixes: [ Linking.makeUrl('/'), 'https://你的自定义域名.com/', 'https://xxx.amplifyapp.com/' // Amplify默认分配的域名 ], config: { screens: { Root: { screens: /* screens routes */ } } } }
2. Amplify未配置SPA路由回退规则
Expo Web是单页应用,所有路由都需要回退到index.html才能被前端Linking逻辑识别,Amplify默认没有开启该配置,直接访问子路由会返回404。
配置方法:
- 进入AWS Amplify控制台的对应项目
- 左侧菜单选择「重写和重定向」
- 新增如下规则:
源地址:
</^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|woff2|json)$)([^.]+$)/>
目标地址:/index.html
状态码:200(重写)
3. 构建环境Node版本不兼容
你当前构建配置使用的Node 12版本过旧,新版expo-linking和expo-cli最低要求Node 16及以上LTS版本,低版本构建会产生隐性兼容问题。
修改amplify.yml的preBuild阶段配置:
preBuild: commands: - nvm use 16 # 替换为你本地开发使用的Node LTS版本 - npm install --quiet --global expo-cli # 其余原有命令保持不变
4. 子路径部署配置缺失
如果你将项目部署在域名的子路径下(如https://xxx.amplifyapp.com/app/),需要额外在app.json中配置expo.web.publicUrl为对应子路径,同时同步更新Linking的prefixes配置,否则路由匹配会出现偏移。
内容的提问来源于stack exchange,提问作者Felipe César
相关产品推荐
相关产品推荐

