故障排除
以下是一些在设置 React Native 时可能遇到的常见问题。如果您遇到此处未列出的问题,请尝试在 GitHub 上搜索该问题。
端口已被使用
Metro 捆绑器 运行在 8081 端口。如果另一个进程已经在使用该端口,您可以终止该进程,或者更改捆绑器使用的端口。
终止 8081 端口上的进程
运行以下命令以查找正在侦听 8081 端口的进程的 ID
sudo lsof -i :8081
然后运行以下命令以终止进程
kill -9 <PID>
在 Windows 上,您可以使用资源监视器查找使用 8081 端口的进程,并使用任务管理器停止它。
使用除 8081 以外的端口
您可以使用 port
参数配置捆绑器以使用除 8081 以外的端口,从项目的根目录运行
- npm
- Yarn
npm start -- --port=8088
yarn start --port 8088
您还需要更新您的应用程序以从新端口加载 JavaScript 捆绑包。如果从 Xcode 中的设备上运行,您可以通过在 ios/__App_Name__.xcodeproj/project.pbxproj
文件中将 8081
的所有出现更改为您选择的端口来实现。
NPM 锁定错误
如果您在使用 React Native CLI 时遇到 npm WARN locking Error: EACCES
等错误,请尝试运行以下命令
sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules
缺少 React 库
如果您手动将 React Native 添加到您的项目中,请确保您已包含正在使用的所有相关依赖项,例如 RCTText.xcodeproj
、RCTImage.xcodeproj
。接下来,这些依赖项构建的二进制文件必须链接到您的应用程序二进制文件。使用 Xcode 项目设置中的“链接的框架和库”部分。更详细的步骤如下:链接库。
如果您使用的是 CocoaPods,请验证您是否已将 React 以及子规范添加到 Podfile
中。例如,如果您使用的是 <Text />
、<Image />
和 fetch()
API,则需要在您的 Podfile
中添加这些内容
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'RCTText',
'RCTImage',
'RCTNetwork',
'RCTWebSocket',
]
接下来,确保您已运行 pod install
并且已在您的项目中创建了包含已安装 React 的 Pods/
目录。CocoaPods 将指示您从此以后使用生成的 .xcworkspace
文件才能使用这些已安装的依赖项。
作为 CocoaPod 使用时 React Native 无法编译
有一个名为cocoapods-fix-react-native 的 CocoaPods 插件,它可以处理由于使用依赖项管理器时存在差异而导致的任何潜在的源代码后修复。
参数列表过长:递归头文件扩展失败
在项目的构建设置中,用户搜索头文件路径
和 头文件搜索路径
是两个配置,用于指定 Xcode 应该在哪里查找代码中指定的 #import
头文件。对于 Pod,CocoaPods 使用特定文件夹的默认数组进行查找。验证此特定配置是否未被覆盖,并且配置的文件夹都不太大。如果其中一个文件夹是大型文件夹,Xcode 将尝试递归搜索整个目录,并在某个时刻抛出上述错误。
要将 用户搜索头文件路径
和 头文件搜索路径
构建设置恢复为 CocoaPods 设置的默认值,请选择构建设置面板中的条目,然后点击删除。它将删除自定义覆盖并返回到 CocoaPod 默认值。
没有可用的传输
React Native 为 WebSockets 实现了一个 polyfill。这些polyfill 作为您通过 import React from 'react'
包含在应用程序中的 react-native 模块的一部分进行初始化。如果您加载另一个需要 WebSockets 的模块,例如Firebase,请确保在 react-native 之后加载/需要它
import React from 'react';
import Firebase from 'firebase';
Shell 命令无响应异常
如果您遇到 ShellCommandUnresponsiveException 异常,例如
Execution failed for task ':app:installDebug'.
com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException
尝试将您的 Gradle 版本降级到 1.2.3(位于 android/build.gradle
中)。
react-native init 挂起
如果您遇到运行 npx react-native init
在您的系统中挂起的问题,请尝试在详细模式下再次运行它,并参考#2797以了解常见原因
npx react-native init --verbose
当您调试进程或需要更多了解抛出的错误时,您可能希望使用详细选项输出更多日志和信息来确定您的问题。
在项目的根目录中运行以下命令。
- npm
- Yarn
npm run android -- --verbose
yarn android --verbose
无法启动 React Native 包管理器(在 Linux 上)
案例 1:错误“code”:“ENOSPC”,“errno”:“ENOSPC”
问题是由inotify(由 Linux 上的 watchman 使用)可以监视的目录数量引起的。要解决此问题,请在您的终端窗口中运行此命令
echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
错误:spawnSync ./gradlew EACCES
如果您遇到在 macOS 上执行 npm run android
或 yarn android
抛出上述错误的问题,请尝试运行 sudo chmod +x android/gradlew
命令以将 gradlew
文件设为可执行文件。