跳到主要内容

故障排除

以下是一些你在设置 React Native 时可能会遇到的常见问题。如果你遇到此处未列出的问题,请尝试在 GitHub 上搜索该问题

端口已被占用

Metro 打包器在 8081 端口运行。如果另一个进程已经在使用该端口,你可以终止该进程,或者更改打包器使用的端口。

终止 8081 端口上的进程

运行以下命令以查找正在监听 8081 端口的进程 ID

shell
sudo lsof -i :8081

然后运行以下命令终止该进程

shell
kill -9 <PID>

在 Windows 上,你可以使用资源监视器找到使用 8081 端口的进程,并使用任务管理器将其停止。

使用除 8081 之外的端口

你可以通过使用 port 参数来配置打包器使用 8081 以外的端口,在你的项目根目录中运行

shell
npm start -- --port=8088

你还需要更新你的应用程序,以从新端口加载 JavaScript 包。如果在 Xcode 中在设备上运行,可以通过更新 ios/__App_Name__.xcodeproj/project.pbxproj 文件中所有 8081 的出现项为你选择的端口来完成此操作。

NPM 锁定错误

如果在使用 React Native CLI 时遇到诸如 npm WARN locking Error: EACCES 之类的错误,请尝试运行以下命令

shell
sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

缺少 React 库

如果你手动将 React Native 添加到你的项目中,请确保你已包含所有正在使用的相关依赖项,例如 RCTText.xcodeprojRCTImage.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 并且在你的项目中创建了一个带有已安装 React 的 Pods/ 目录。CocoaPods 将指示你从此以后使用生成的 .xcworkspace 文件,以便使用这些已安装的依赖项。

作为 CocoaPod 使用时 React Native 无法编译

有一个名为 cocoapods-fix-react-native 的 CocoaPods 插件,它处理因使用依赖管理器而导致的源代码的任何潜在后期修复。

参数列表过长:递归头文件扩展失败

在项目的构建设置中,User Search Header PathsHeader Search Paths 是两个配置,它们指定 Xcode 应该在哪里查找代码中指定的 #import 头文件。对于 Pods,CocoaPods 使用默认的特定文件夹数组进行查找。验证此特定配置未被覆盖,并且配置的文件夹中没有一个太大。如果其中一个文件夹是一个大文件夹,Xcode 将尝试递归搜索整个目录并在某个时候抛出上述错误。

要将 User Search Header PathsHeader 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

通过在终端中运行以下命令重新启动 ADB 服务器

adb kill-server
adb start-server

无法启动 react-native 包管理器(在 Linux 上)

情况 1:错误 "code":"ENOSPC","errno":"ENOSPC"

问题是由 inotify(在 Linux 上被 watchman 使用)可以监视的目录数量引起的。要解决它,请在你的终端窗口中运行此命令

shell
echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

错误:spawnSync ./gradlew EACCES

如果你在 macOS 上运行 npm run androidyarn android 时遇到上述错误,请尝试运行 sudo chmod +x android/gradlew 命令,使 gradlew 文件可执行。