解决 React Native 中的常见错误
React Native 是当今最常用的 JavaScript 移动框架之一。React Native 使熟悉 JavaScript 和 React Web 框架的开发人员能够使用类似的方法和原理开发移动应用程序。
作为一个 React Native 开发者,你在开发你的应用程序时必然会遇到一些错误。当编译器在运行代码时检测到错误时,它会终止进程并显示错误消息。
React Native 中的错误消息非常具有描述性。它们告诉开发人员发生了什么错误以及检测到错误的位置。此外,它们通常会提供明确的说明或至少提供有关如何解决问题的线索。
有些错误本质上比其他错误更容易调试。例如,由于使用错误的语法或访问未定义的变量或组件而发生的错误比由错误配置或不兼容的依赖项引起的错误更容易调试。
无论错误的性质如何,您通常都需要帮助来解决它们。
在这篇文章中,我将介绍一些常见的 React Native 错误及其解决方案。其中一些错误将有不同的解决方案,具体取决于首先导致错误的原因。对于此类错误,请逐个查看解决方案。
随意使用以下链接跳至以下任何部分:
安装应用程序失败
无法加载脚本
React Nativerun-android命令无法识别
react-native找不到相关命令
无法识别的命令:“链接”
重复资源
安装应用程序失败
创建新的 React Native 项目后,第一次尝试使用命令运行应用时react-native run-android,可能会遇到以下错误:
BUILD FAILED in 13s error Failed to install the app. Make sure you have an Android emulator running or a device connected. Run CLI with --verbose flag for more details. Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081 FAILURE: Build failed with an exception. ...
此错误消息表示构建过程不成功,并且还指定了失败的特定命令。有时您可以通过简单地使用新的命令提示符并重新启动虚拟设备来消除错误。
然而,错误通常是由使用不兼容的 Gradle 版本来构建应用程序引起的。
Android Studio 构建系统需要正确版本的Gradle 才能成功构建 Android 应用程序。在这种情况下,您需要将应用中使用的 Gradle 版本升级到与您的 Android Studio 构建系统兼容的版本。
按着这些次序:
在 VS Code 等文本编辑器中打开您的 React Native 应用程序
在应用程序的根文件夹中,导航到android > gradle > wrapper
编辑gradle-wrapper.properties文件
distributionUrl使用 Gradle 兼容版本的 URL更新变量
react-native run-android再次运行以使用新版本构建应用程序。
这是第二步和第三步的完整路径:
{your-project-folder}\android\gradle\wrapper\gradle-wrapper.properties
要获得第四步的准确版本的 Gradle,请转到 Gradle 的分发列表并检查最新的-all.zipGradle 版本。然后,distributionUrl按如下方式更新变量:
distributionUrl=https\://services.gradle.org/distributions/gradle-{latest version}.zip
要了解有关 Gradle 和 Android Studio 的更多信息,请阅读Android Gradle 插件和 Android Studio 兼容性文章。
无法加载脚本
开发人员在尝试运行他们的 React Native 应用程序时经常遇到的另一个错误如下所示:
Unable to load script. Make sure you're either running a metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
此错误始终显示在连接的 Android 设备上。此错误有多种原因。因此,也有不同的解决方案。
解决方案 1:正确打包捆绑包
您应用的所有 JavaScript 都捆绑到该index.android.bundle文件中。如果捆绑文件不可用或未正确打包,您将收到Unable to load script错误消息。请按照以下说明进行修复。
超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →
进入{your-project-folder}/android/app/src/main/文件夹并检查其中是否assets存在文件夹。如果资产文件夹不存在,请创建它。
接下来,直接从您的根文件夹中运行:
cd android ./gradlew clean
接下来,打开一个命令终端并确保它指向您项目的根文件夹。如果您的项目只有一个文件(即index.js),请运行以下命令:
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
如果有两个文件(即index.android.js和index.ios.js),则改为运行以下命令:
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
请注意,两者都是单个命令。
生成包后,运行react-native run android.
要一次执行上述所有步骤,您可以将它们放在scriptspackage.json 的部分中,如下所示:
"android-script": "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"
上面的命令是npm run android-script.
解决方案 2:使用adb reverse
如果您在实施第一个解决方案后仍然收到相同的错误,那么您需要考虑其他原因。另一个常见原因是端口未暴露。如果您在物理设备上运行应用程序,就会发生这种情况。
该adb reverse命令允许您使用计算机上的 TCP 端口公开 Android 设备上的 TCP 端口。要尝试修复错误,请运行以下命令:
adb reverse tcp:8081 tcp:8081
在这里,您通过计算机上的端口 8081 暴露电话上的 TCP 端口 8081。
PATH如果您的 Windows变量中没有 Android 平台工具组件,则可adb执行文件位于以下路径:
C:\Users\{your-username}\AppData\Local\Android\sdk\platform-tools
解决方案 3:添加明文支持
如果前两个选项不能解决 React Native 无法加载脚本,那么错误很可能来自网络通信问题。
具体来说,由于明文支持被禁用,应用程序可能无法从开发服务器访问,从 Android 9.0(API 级别 28)开始就是这种情况。
要解决此问题,请修改AndroidManifest.xml文件并添加明文支持,如下所示:
<?xml version="1.0" encoding="utf-8"?> <manifest ...><uses-permission android:name="android.permission.INTERNET" /><application...android:usesCleartextTraffic="true"...>...</application> </manifest>
您可以在以下位置找到您的AndroidManifest.xml文件:
{your-project-folder}/android/app/src/main/AndroidManifest.xml
重新启动您的应用程序以应用更改。
React Nativerun-android命令无法识别
有时,当您尝试在 Android 上运行 React Native 应用程序时,您可能会在命令提示符下收到以下错误消息:
Command run-android unrecognized. Did you mean to run this inside a react-native project?
错误消息已经暗示了错误的最常见原因:您没有在 React Native 文件夹中运行该命令。在这种情况下,解决方案是确保在运行应用程序之前导航到应用程序的根文件夹。这就是我的意思:
// After initializing a project: react-native init AwesomeProject// Make sure to navigate to the project folder: cd AwesomeProject// Before you run the app: react-native run-android
否则,如果错误不是因为使用了错误的文件夹,那么可能是您没有安装项目的内容。为此,请运行:
npm install or yarn install
您的 react-native 或 react-native-cli 的全局安装也可能是旧的或损坏的。在这种情况下,只需使用以下命令之一在全局范围内重新安装您的库:
npm:
npm install -g react-native && npm install -g @react-native-community/cli
纱:
yarn global add react-native && yarn global add @react-native-community/cli
作为说明,我建议使用npx(包含在 npm v5.0+ 中)按需安装库。
这意味着无论何时您运行任何其他 React Native CLI 命令,它都会在创建项目之前npx react-native init <your-project-name>首先询问您的安装权限。react-native这可确保您始终使用最新版本!
最后,如果以上所有方法都不起作用,您可能需要使用以下命令升级您的 npm:
npm install npm@latest -g
确保使用新终端运行这些命令中的每一个。这是为了防止在您的.bashrc文件中使用过时的路径源。
react-native找不到相关命令
command not found: react-native是 React Native 中的另一个常见错误。尝试运行任何react-native命令时都会遇到此错误,例如尝试初始化 React Native 项目时,如下所示:
react-native init MyProject
该command not found错误有两个潜在原因:或者您没有在本地计算机上安装 CLI,或者您安装了 CLI,但没有正确配置。
通过对所有 npm 可执行文件使用 npx 可以避免这两种情况。例如,要创建一个新的 React Native 应用程序,请使用 npx 运行它,如下所示:
npx react-native init MyProject
react-native这将在初始化项目之前安装包的最新可用版本。
无法识别的命令:“链接”
尝试在 React Native 项目中链接自定义字体或图标等资产时,您可能会在命令终端上收到以下错误:
error Unrecognized command "link". info Run "react-native --help" to see a list of all available commands.
当您尝试使用手动链接功能(即react-native link和react-native link unlink命令)时会发生此错误,该功能已在 React Native 0.69 中删除并替换为自动链接。
为避免此错误,您需要使用第三方资产链接库,例如react-native-asset自动链接资产。
首先,使用以下命令之一安装库:
npm install -g react-native-asset # or if you're using yarn: yarn global add react-native-asset
react-native.config然后在项目文件夹的根级别创建一个文件并添加以下代码片段:
module.exports = {project: {ios: {},android: {}},"assets": ["./src/assets/font","./src/assets/mp3","./src/assets/icons"] };
运行以下命令之一以在您的代码库中启用自动链接和取消链接。
npm:
npx react-native-asset
纱:
yarn react-native-asset
现在您可以在代码中使用任何指定的资产。例如,您可以在样式表中使用自定义字体:
fontFamily: 'my-custom-font'
Soul音听歌神器App,聚合5大平台音乐资源无限畅听,支持下载无损音质歌曲!
重复资源
尝试使用from生成发布 APK时可能遇到的另一个常见错误是 Duplicate Resource 错误:Generate Signed APK``Android Studio
[drawable-mdpi-v4/jumper] /Users/admin/Projects/testApp/android/app/src/main/res/drawable-mdpi/jumper.png [drawable-mdpi-v4/jumper] /Users/admin/Projects/testApp/android/app/build/generated/res/react/release/drawable-mdpi-v4/jumper.png: Error: Duplicate resources :app:mergeReleaseResources FAILEDFAILURE: Build failed with an exception....
构建失败是因为在 Android 文件夹内的 Android 项目中发现了重复的资源。根据原因,有多种解决方案。
解决方案 1:从终端清理可绘制文件夹
drawable通常,您只需使用 Gradle 从终端清理文件夹即可摆脱错误。为此,请cd进入android文件夹,然后./gradlew clean在尝试再次运行应用程序之前运行:
react-native run android
如果失败,请尝试下一个解决方案。
解决方案 2:添加一些帮助代码
大多数情况下,简单地清理drawable文件夹并不能解决问题。如果是这种情况,那么您需要对react.gradle文件进行轻微修改以防止重复的资源冲突。
在. react.gradle_ node_modules/react-native/react.gradle代码应该放在doFirst块之后:
doLast {def moveFunc = { resSuffix ->File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");if (originalDir.exists()) {File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");ant.move(file: originalDir, tofile: destDir);}}moveFunc.curry("ldpi").call()moveFunc.curry("mdpi").call()moveFunc.curry("hdpi").call()moveFunc.curry("xhdpi").call()moveFunc.curry("xxhdpi").call()moveFunc.curry("xxxhdpi").call() }
这个错误在 2018 年由GitHub 用户 echaso 解决,他提供了上面的代码。
结论
在本文中,我们研究了 React Native 中的六个常见错误以及如何调试每个错误。如果您遇到的错误未包含在此处,请不要犹豫,
解决 React Native 中的常见错误相关推荐
- react native中一次错误排查 Error:Error: Duplicate resources
最近一直在使用react native中,遇到了很多的坑,同时也学习到了一些移动端的开发经验. 今天在做一个打包的测试时,遇到了一个问题,打包过程中报错"Error:Error: Dupli ...
- WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而 ...
- 我在React Native中构建时获得的经验教训
by Amanda Bullington 通过阿曼达·布林顿(Amanda Bullington) 我在React Native中构建时获得的经验教训 (Lessons I learned while ...
- 了解React Native中的不同JavaScript环境
by Khoa Pham 通过Khoa Pham 了解React Native中的不同JavaScript环境 (Get to know different JavaScript environmen ...
- 理解 React Native 中的 AJAX 请求
曾经,大多数 Web 应用程序通过用户操作刷新整个网页以与 Web 服务器通信. 后来,AJAX(异步 JavaScript 和 XML)概念通过提供一种在后台与 Web 服务器通信的方式使 Web ...
- SQL Server连接中的常见错误
SQL Server连接中的常见错误: 一."SQL Server 不存在或访问被拒绝" 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多. 一般说来,有以下几种可能性 ...
- 如何在React Native中使用Redux Saga监视网络更改
by Pritish Vaidya 通过Pritish Vaidya 如何在React Native中使用Redux Saga监视网络更改 (How to monitor network change ...
- 如何在React Native中创建精美的动画加载器
by Vikrant Negi 通过Vikrant Negi 如何在React Native中创建精美的动画加载器 (How to create a beautifully animated load ...
- 如何在React Native中构建项目并管理静态资源
by Khoa Pham 通过Khoa Pham 如何在React Native中构建项目并管理静态资源 (How to structure your project and manage stati ...
最新文章
- 时间序列举例--------协方差+相关系数+随机游走+平稳性
- 调试异常 Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed
- 瑞柏匡丞_移动互联的发展现状与未来
- 两点之间直线只有一条,曲线却有无数条,哪条才是最短的?
- iphone微信美颜插件_iOS13.5 插件分享
- js中的preventDefault与stopPropagation详解(转)
- iOS边练边学--(Quartz2D)图片裁剪,带圆环的裁剪
- 郑州大学linux安装锐捷客户端
- suitecrm 如何backup and restore ,从一个server 转移到另一个 server . 并保证customer package , customer module 不丢...
- 关于我发的这个PDF文件的理解
- 欧姆龙PLC-小型PLC概述
- java中modifier_Java Modifier工具类
- OpenGL 和 DirextX
- 玲听预告 | 蚂蚁金服布局区块链的底层心法是什么?
- 今日杂感-20220322
- 关于Raphael开发过程中的一些总结
- echart 人物关系图添加照片
- OLA端点问题实际应用效果
- C++11新特性总结
- 89个windows常用API调用
热门文章
- halcon测试篇:弧度和角度之间的转换
- html中input标签的tabindex属性
- 电子科技大学计算机导师李珂,电子科技大学计算机科学与工程学院导师介绍:宋超...
- 其他计算机设备是什么东西,什么是网络设备?计算机入门知识,这些网络设备及工具你有必要知道...
- 手把手教你在Windows下使用MinGW编译libav
- antd a-tooltip修改背景颜色及箭头小三角形颜色,自定义背景颜色
- LaTex使用技巧(2):双引号匹配问题
- 1.7-17:字符串判等
- Win10 64位下 darknet YOLO V3配置,视频测试及结果保存
- OpenGL中的glLoadIdentity、glTranslatef、glRotatef原理