RN红屏报错采坑 无法加载 index.android.bundle

Unable to load script from assets index.android.bundle...

Unable to load script from assets ‘index.android.bundle’

这是个啥问题

这个错误是想说在加载script的资源的时候失败了,没有发现对应的packager server

造成这种问题的原因挺多的,一部分是这个server真的没有启动。

这里要说的是服务确实启动了,但却还是找不到服务, 如何验证服务确实启动了呢?

  • 如何验证服务已经成功启动:
    • 在浏览器中访问packager service地址下的index文件, 如果是android应该是: http://localhost:8081/index.android.bundle?platform=android&dev=true&hot=false&minify=false, 可以看到node的服务确实在加载了。
    • 并且浏览器里显示的是bundle的资源代码(或者报错信息), 大概就这样

接下来:如果你运行adb reverse tcp:8081 tcp:8081解决了这个问题, 那么恭喜你 不用往下看了。


好,我现在确实浏览器里可以访问了并且运行了adb reverse没有用,那么

解决方案呢

具体如下:

  1. (in project directory) mkdir android/app/src/main/assets
  2. react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
  3. react-native run-android

大家试了一下,发现真的不报错了,就很开心?,?赞一下吧,但是❗️

这个方案是有问题的

本质上这个方案是将packager server打包好的bundle拷贝到本地的assets目录下,让app去读取本地assets的资源,相当于这个资源是静态的了,而不是直接链接到packager server上去的。

这会造成:

  • react-native的热推送机制无法使用,也就是资源代码有修改就需要运行一遍上面的命令才能让app拿到最新的bundle,
  • 在开发者菜单运行Reload或者Debug JS Remotely命令后仍然报相同的错。

从根本上解决

这个问题本质上app是连不上packager server, 造成这个的原因很多, 我碰到的情况是localhost被映射到了 ipv6的::1上而不是 127.0.0.1, 可以使用ping localhost查看一下.

如果能找到具体的原因,可以根据具体原因解决,否则这里有一个通用的解决方案:

通用解决方案

启动packager server的命令是react-native start,这个命令默认启动在 localhost:8081地址下,但他接受porthost的参数,这里我们可以用一个新的端口和地址,例如:

  • 第一步: react-native start --port 8082 --host 0.0.0.0

    • 我这里用0.0.0.0可以配合本机的ipv4 的ip访问成功
  • 第二步: 查看本地的ipv4地址

  • 第三步: 打开开发者菜单> Dev Setting > Debug server host for device, 手动输入 你的ipv4地址:8082

  • Reload 应该就可以了

转载于:https://juejin.im/post/5ca5c9aae51d4569aa2529d0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值