React Native Expo SDK52下SetImmediate不存在问题求助
解决Expo SDK 52中
setImmediate未定义的问题 问题背景
升级Expo SDK 52(对应React Native 0.77.1)后出现setImmediate未定义的错误,尝试手动添加该全局属性、安装react-native-polyfill-globals均未解决。
当前项目的package.json配置:
{ "name": "contactless_send", "version": "2.0.1", "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web" }, "dependencies": { "@expo/vector-icons": "^14.0.4", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-picker/picker": "^2.11.0", "expo": "^52.0.15", "expo-font": "^12.0.10", "expo-status-bar": "~1.12.1", "nativewind": "^2.0.11", "react": "18.2.0", "react-native": "^0.77.1", "react-native-app-intro-slider": "4.0.4", "react-native-keyboard-aware-scroll-view": "^0.9.5" }, "devDependencies": { "@babel/core": "^7.24.0", "@react-native-community/cli": "^16.0.0", "tailwindcss": "3.3.2" }, "private": true }
可行解决方案
方案1:使用Expo官方polyfill配置(推荐)
Expo SDK 52基于的React Native 0.77移除了部分Node.js全局API的默认polyfill,可通过expo-build-properties配置恢复:
- 安装依赖:
npx expo install expo-build-properties
- 在
app.json/app.config.js中添加插件配置:
{ "expo": { "plugins": [ [ "expo-build-properties", { "globalPolyfills": ["setImmediate"] } ] ] } }
- 清除缓存并重启开发服务:
npx expo start --clear
方案2:手动在入口文件添加polyfill
如果方案1不生效,在项目入口文件(如App.js)最顶部添加以下代码(确保在其他导入语句之前执行):
// 手动polyfill setImmediate global.setImmediate = global.setImmediate || ((callback, ...args) => { return setTimeout(callback, 0, ...args); }); // 配套添加clearImmediate global.clearImmediate = global.clearImmediate || ((timeoutId) => { clearTimeout(timeoutId); });
方案3:排查第三方依赖兼容性
部分旧版第三方库可能未适配RN 0.77的API变更,检查react-native-keyboard-aware-scroll-view、react-native-app-intro-slider等依赖是否有适配RN 0.77的新版本,升级后可能解决问题。
内容的提问来源于stack exchange,提问作者Anmol
相关产品推荐
相关产品推荐

