为什么既不热也不实时重新加载对这个 React Native 应用程序有任何影响?
抽象的
我最近开始作为承包商工作,为一家不依赖expo
. 一直使用上述工具,过渡到处理 React Native 的内部方法让我有些头疼。
将模拟器设置为对我有用的设置(在模拟器上手动打开热重载是我最接近的expo
)除了发送发生热重载的通知外,不会以任何方式影响应用程序。
此外,我认为问题可能是特定于平台的。主要前端开发人员在具有相同项目/开发环境设置的 Windows 上工作,并且没有遇到任何问题。
在启动应用程序时
要启动该应用程序,我使用的是自定义npm run android
脚本(取决于gulp
),如下所示:
npm run android
npm run buildRN && npm run rnAndroid
buildRN
:npm run dropOldBabel && npm run buildNF && npm run rnLink && npm run buildImagesList
dropOldBabel
:cd node_modules && rm -f react-pure-render/.babelrc redux-devtools-themes/.babelrc base16/.babelrc react-json-tree/.babelrc form-schema-validation/.babelrc && cd ..
buildNF
:gulp buildNativeFiles
rnLink
:node node_modules/react-native/local-cli/cli.js link
buildImagesList
:gulp generateImagesList
rnAndroid
:node node_modules/react-native/local-cli/cli.js run-android
生成图像后,它启动 JS 服务器,启动 Gradle 并在目标设备(我的 Android 模拟器)上安装应用程序。
应用程序目标在 localhost 上的 port 上运行8081
,因此adb -s emulator-5554 reverse tcp:8081 tcp:8081
正在发出命令。我怀疑这个端口转发可能是这个问题的罪魁祸首,尽管我不知道如何支持这一说法。
然后应用程序以adb -s emulator-5554 shell am start -n com.firm.name/com.firm.name.MainActivity
command 启动,node
控制台愉快地显示Starting: Intent { cmp=com.firm.name/.MainActivity }
。
关于发展过程
根据经验expo
告诉我,进行更改并保存文件以使更改生效就足够了。然而,这种情况并非如此。
除了通过模拟器通知我发生了热重载之外,保存文件什么都不做。除了这个 toast 通知,我什么也没得到。此外,打开 Live Reload 并没有改变;如果我通过停止服务器并调用完全重新启动应用程序,则应用更改npm run android
。
平台
操作系统
- 基本 OS 6 Odin(基于 Ubuntu 20.04.2 LTS 构建)
节点
- npm -v 6.4.1
- 节点-v 10.14.1
反应原生
- 反应原生 cli:2.0.1
- 反应原生:0.59.10
安卓模拟器
- Android 模拟器版本 30.8.4.0 (build_id 7600983)
- Nexus 5X 图片
概括
总而言之 -什么可能导致这种行为?
为什么在模拟器清楚地注意到更改的情况下,代码在重新启动之前不会更改?
为什么它只发生在我的平台上,而不发生在 Windows 10 上?