You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Expo SDK 49→50与Node.js 16→20后遭遇'react-native-keyboard-controller Not Linked'错误及应用崩溃问题

升级Expo SDK 49→50与Node.js 16→20后遭遇'react-native-keyboard-controller Not Linked'错误及应用崩溃问题

嘿,我看你在升级Expo SDK和Node.js版本后碰到了俩头疼的问题:react-native-keyboard-controller提示未链接,还触发了"Invariant Violation: 'main' has not been registered"的应用崩溃报错。我结合社区里的常见解决方案,给你整理了一套实操步骤,应该能帮你搞定:

核心问题分析

这俩问题大概率是连锁反应:Expo SDK 50对React Native原生依赖的链接机制做了优化,加上Node.js从16跨到20,依赖安装的缓存、版本对齐逻辑都有变化,导致react-native-keyboard-controller要么版本不兼容,要么自动链接没触发成功,进而打乱了应用的初始化流程,引发"main"未注册的崩溃。

具体解决步骤

  • 彻底清理依赖环境,从头重装
    旧的缓存、半安装的依赖是这类问题的重灾区,先把这些"垃圾"清干净:

    # 删除node_modules和所有锁文件
    rm -rf node_modules package-lock.json yarn.lock
    # 清除Expo的缓存(这个很关键,很多人会漏)
    npx expo r -c
    # 重新安装所有依赖
    npm install
    # 最后用Expo的修复命令强制对齐所有依赖版本
    npx expo install --fix
    
  • 确保react-native-keyboard-controller适配Expo SDK 50
    Expo SDK 50对应的React Native版本是0.73.x,你得装支持这个版本的react-native-keyboard-controller:

    # 直接安装最新稳定版,它通常会适配最新的RN/Expo版本
    npm install react-native-keyboard-controller@latest
    

    装完之后,不管你是管理工作流还是裸工作流,都跑一遍npx expo prebuild(管理工作流会自动处理原生文件,裸工作流会重新生成原生目录),手动触发自动链接机制,避免Expo漏处理这个依赖。

  • 排查"main"未注册的崩溃根源
    这个报错一般是应用入口出了问题,或者依赖冲突导致初始化失败:

    • 打开app.json或app.config.js,检查main字段是否正确指向你的入口文件,比如用Expo Router的话应该是"main": "expo-router/entry",普通项目可能是"main": "index.js"
    • 如果你用了Expo Router,单独升级一下它确保版本兼容:npx expo install expo-router
    • 做个最小化测试:临时把你的App.js替换成最基础的代码,看应用能不能正常启动,以此排除是业务代码还是依赖的问题:
      import { View, Text, StyleSheet } from 'react-native';
      
      export default function App() {
        return (
          <View style={styles.container}>
            <Text>测试应用是否能正常启动</Text>
          </View>
        );
      }
      
      const styles = StyleSheet.create({
        container: {
          flex: 1,
          justifyContent: 'center',
          alignItems: 'center',
        },
      });
      
  • 适配Node.js 20的细节调整
    Node.js 20和16的模块解析、依赖安装逻辑有差异,做这两个小调整:

    • 升级你的npm版本到9.x以上,适配Node.js 20:npm install -g npm@latest
    • 更新package.json里的engines字段,明确要求Node.js 20:
      "engines": {
        "node": ">=20.0.0"
      }
      
  • 裸工作流额外注意点
    如果是裸工作流的项目,还要做这些操作:

    • 彻底清理并重新生成原生目录:npx expo prebuild --clean
    • iOS项目:进入ios目录,跑pod install --repo-update确保Pod依赖安装正确
    • Android项目:打开Android Studio同步Gradle项目,或者在终端跑./gradlew clean build清理构建缓存

备注:内容来源于stack exchange,提问作者Nidhal Ben Maad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:10:31