故障排除
以下是您在设置 React Native 时可能遇到的一些常见问题。如果您遇到此处未列出的问题,请尝试在 GitHub 上搜索该问题。
端口已被使用
The 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 bundle。如果在 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。例如,如果您使用了 <Text />、<Image /> 和 fetch() API,您需要在 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 设置的默认值,请在 Build Settings 面板中选择该条目,然后按 Delete。这将删除自定义覆盖并恢复到 CocoaPod 默认值。
没有可用的传输
React Native 实现了一个 WebSocket 的 polyfill。这些 polyfills 是作为您通过 import React from 'react' 包含在应用程序中的 react-native 模块的一部分进行初始化的。如果您加载了另一个需要 WebSocket 的模块,例如 Firebase,请确保在 react-native 之后加载/require 它。
import React from 'react';
import Firebase from 'firebase';
Shell Command Unresponsive Exception
如果您遇到 ShellCommandUnresponsiveException 异常,例如
Execution failed for task ':app:installDebug'.
com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException
通过在终端中运行以下命令重启 ADB 服务器
adb kill-server
adb start-server
无法启动 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 文件设置为可执行文件。