Expo React Native App 未加载 AppEntry.bundle

Posted

技术标签:

【中文标题】Expo React Native App 未加载 AppEntry.bundle【英文标题】:Expo React Native App Not Loading the AppEntry.bundle 【发布时间】:2020-04-05 05:41:09 【问题描述】:

我正在使用 expo 开发一个 react-native 应用程序。该应用程序运行良好。我可以 npm start 运行 Metro Builder,然后直接在模拟器和 ios 设备上运行我的应用程序。

我做了两件事。

    我将 expo 版本升级到最新版本 - 3.17.15 我重新启动了我的笔记本电脑。

在这 2 项更改之后,我仍然可以执行 npm start 而不出现任何问题。但是,当我尝试在 iOS 模拟器中打开/运行该应用程序时,它卡在了捆绑包加载中。事实上,它无法仅获取捆绑文件。

我认为这是一个网络问题,模拟器/设备无法访问http://127.0.0.1:19000 但是,当我在正常工作的浏览器中访问该 URL 时。

我在错误中看到的bunlde url:

现在,当我尝试通过模拟器访问该捆绑网址时:

http://127.0.0.1/node_modules/expo/AppEntry.bundle

浏览器从不加载事物并超时。

我已经试过了:

    清理缓存 - npm start --reset-cache 删除 ~/.expo 和 ~/project/.expo 中的 .expo 文件夹 从局域网更改模式 -> 隧道。 将全局 expo-cli 升级到最新版本。 删除项目中的node_modules目录~/project/node_modules 通过执行 - npm install 重新安装 node_modules。

重要提示 - 在我当前的应用程序出现此问题后,我决定生成一个新的空白 expo 应用程序并运行它。结果相同。未加载捆绑包。我还记得过去发生在我身上的类似事情,但不记得我是如何解决的。

我的网络是通过我的手机的热点。同一个网络过去一直工作到昨天没有任何问题。所以不确定重启是否导致某些设置恢复。

任何解决此问题的帮助都会非常有帮助。

【问题讨论】:

扫二维码有用吗? 不。所以我在某处读到我可以将模式更改为从局域网隧道,它会起作用。但两者都不起作用。 问题出在世博会,世博会前几天有新的更新,你的SDK和CLI是最新版本吗? 是的。 SDK - 37. Expo expo-cli@3.17.16。有没有办法轻松找出捆绑包是否成功生成。因为当我上网时-它确实在网络中打开了应用程序..并非一切正常。没关系。但应用会打开。 这里还有一些额外的信息:在调试模式下启动 expo 应用程序后,我确实收到了 AppEntry.bundle ::ffff:127.0.0.1 - - [06/Apr/2020:05 :29:25 +0000] "GET /node_modules/expo/AppEntry.bundle?platform=ios&dev=true&minify=false&hot=false HTTP/1.1" 200 - "-" "Expo/2.15.3.10122 CFNetwork/1125.2 Darwin/19.4.0 " 【参考方案1】:

终于在花了 2 天时间在两台不同的笔记本电脑上工作后,我终于找到了这个问题的根源。

首先,我认为这是一个操作系统升级问题(我将我的操作系统升级到了 Mac OS Catalina)。因此,我在另一台笔记本电脑上克隆了我的 repo,这是一台全新的笔记本电脑,其中没有节点博览会或本机反应。我初始化了一个新的 expo typescript react native 项目。试图运行它 - 像魅力一样工作。模拟器没有安装,但在我的设备上运行没有任何问题。 Metro 捆绑日志已生成。

这让我更接近我的假设。因此,我尝试恢复我在存储库中所做的所有更改,并尝试使用npm start 构建应用程序,最终运行expo start。不工作。

最后 - 我在笔记本电脑上创建了一个新用户。升级版的。克隆了 repo - 并尝试构建项目。这次!它再次失败,但是有一个变化 - 在 Metro Builder 日志中我收到了这个错误:

2020-04-06T21:29:57,075: [0x110e7fdc0] while computing sockname: failed to create /usr/local/var/run/watchman/shrikant-state: Permission denied

Watchman:watchman --no-pretty get-sockname 返回,退出代码=1,signal=null,stderr= 2020-04-06T21:29:57,075: [0x110e7fdc0] 计算 sockname 时:未能创建 /usr/ local/var/run/watchman/shrikant-state: 权限被拒绝

为了解决我刚刚更改了watchman目录的权限:

sudo chmod 042777  /usr/local/var/run/watchman/

应用程序终于在模拟器和设备上构建并成功运行!

【讨论】:

【参考方案2】:

如果其他人遇到类似的事情,我会被困在这个问题上,结果证明 expo 不喜欢我使用逻辑 OR 分配 (||= ),即使 typescript 和我的 linter 都很好。我用三进制替换了我的 ||= 并且工作正常。

【讨论】:

以上是关于Expo React Native App 未加载 AppEntry.bundle的主要内容,如果未能解决你的问题,请参考以下文章

将 Expo React Native 发布到 Apple Store(应用程序加载器未显示)

React native expo,您试图通过调用 firebase.app() 来使用未安装在您的 Android 项目上的 firebase 模块

React Native v-0.63 中的 WebView v-11.2.3 组件未加载其内容(使用 expo cli)

未处理的承诺拒绝:TypeError:网络请求在expo react native 中失败

Expo react-native:.png 图像未显示在 testflight 应用程序上(在开发中工作正常)

create react native app expo无法连接在同一台计算机上的模拟器上运行