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的资源代码(或者报错信息), 大概就这样
- 在浏览器中访问packager service地址下的index文件, 如果是android应该是:
接下来:如果你运行adb reverse tcp:8081 tcp:8081
解决了这个问题, 那么恭喜你 不用往下看了。
好,我现在确实浏览器里可以访问了并且运行了adb reverse
没有用,那么
解决方案呢
- 这个问题的解决方案一搜一大片: 类似于 React-Native 错误集锦
- 这个方案大多都是从 Stack Overflow相关问题的最高赞答案来的: stackoverflow: Unable to load script from assets index.android.bundle on windows
具体如下:
- (in project directory) mkdir android/app/src/main/assets
- 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
- 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
地址下,但他接受port
和host
的参数,这里我们可以用一个新的端口和地址,例如:
-
第一步:
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 应该就可以了