故障排除
这些是你在设置 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 项目设置中的 `Linked Frameworks and Binaries` 部分。更详细的步骤请参阅:链接库。
如果你正在使用 CocoaPods,请验证你已将 React 和其子组件添加到 `Podfile` 中。例如,如果你正在使用 `
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'RCTText',
'RCTImage',
'RCTNetwork',
'RCTWebSocket',
]
接下来,请确保你已运行 `pod install` 并且你的项目已创建 `Pods/` 目录并安装了 React。CocoaPods 会指示你今后使用生成的 `.xcworkspace` 文件以使用这些已安装的依赖项。
React Native 作为 CocoaPod 使用时无法编译
有一个名为 cocoapods-fix-react-native 的 CocoaPods 插件,它处理因使用依赖管理器而导致的源代码的任何潜在后修复。
参数列表过长:递归头文件展开失败
在项目的构建设置中,`User Search Header Paths` 和 `Header Search Paths` 是两个配置,它们指定 Xcode 应该在哪里查找代码中指定的 `#import` 头文件。对于 Pods,CocoaPods 使用默认的特定文件夹数组进行查找。验证此特定配置未被覆盖,并且没有配置的文件夹太大。如果其中一个文件夹很大,Xcode 将尝试递归搜索整个目录并在某个时候抛出上述错误。
要将 `User Search Header Paths` 和 `Header Search Paths` 构建设置恢复为 CocoaPods 设置的默认值,请选择“构建设置”面板中的条目,然后按删除。它将删除自定义覆盖并恢复到 CocoaPod 默认值。
没有可用的传输
React Native 实现了一个 WebSockets 的 Polyfill。这些 polyfills 作为你通过 `import React from 'react'` 包含在应用程序中的 react-native 模块的一部分进行初始化。如果你加载了需要 WebSockets 的另一个模块,例如 Firebase,请务必在 react-native 之后加载/require 它。
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` 文件可执行。