Expo中使用react-native-ble-plx实例化BleManager报TypeError
解决react-native-ble-plx在Expo项目中实例化报错的问题
1. 先排除Web端适配问题
react-native-ble-plx本身没有Web端适配,绝对不要用npx expo start --web启动项目,Web环境下这个库完全无法工作,直接聚焦iOS/Android平台调试。
2. 处理Expo环境的原生模块支持问题
Expo Go(即直接用npx expo start启动的沙盒环境)不包含react-native-ble-plx的原生代码,必须通过预构建或开发构建来集成原生模块:
步骤1:安装适配Expo的依赖
确保安装库本身和Expo配置插件:
npx expo install react-native-ble-plx expo-build-properties
步骤2:配置项目权限与原生参数
在app.json或app.config.js中添加以下配置,确保蓝牙权限和原生版本兼容:
{ "expo": { "plugins": [ [ "expo-build-properties", { "android": { "minSdkVersion": 23, "compileSdkVersion": 33, "targetSdkVersion": 33 }, "ios": { "deploymentTarget": "12.0" } } ] ], "ios": { "infoPlist": { "NSBluetoothAlwaysUsageDescription": "需要蓝牙权限连接BLE设备", "NSBluetoothPeripheralUsageDescription": "需要蓝牙权限连接BLE设备" } }, "android": { "permissions": [ "BLUETOOTH", "BLUETOOTH_ADMIN", "BLUETOOTH_CONNECT", "BLUETOOTH_SCAN", "ACCESS_FINE_LOCATION" ] } } }
步骤3:生成原生项目文件
运行命令生成iOS和Android的原生目录,让Expo集成react-native-ble-plx的原生代码:
npx expo prebuild
步骤4:用本地构建启动项目
放弃Expo Go,直接用模拟器或真机启动:
- iOS平台:
npx expo run:ios
- Android平台:
npx expo run:android
3. 优化代码中的实例逻辑
添加平台判断,避免在Web环境下错误实例化:
import { Platform } from 'react-native'; import { BleManager } from 'react-native-ble-plx'; let bleManager; if (Platform.OS !== 'web') { bleManager = new BleManager(); }
4. 排查常见冲突问题
- 克隆的项目先删除
node_modules、package-lock.json/yarn.lock,重新执行npx expo install,避免依赖版本冲突。 - 确认Expo SDK版本与react-native-ble-plx兼容,比如Expo SDK 49+对应react-native-ble-plx 2.0.0+版本。
- Android设备需同时开启蓝牙和定位权限(BLE扫描依赖定位权限),iOS需在系统设置中允许APP的蓝牙权限。
内容的提问来源于stack exchange,提问作者Moineau _
相关产品推荐
相关产品推荐

