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

使用Expo创建React Native Web应用启动报错:TypeError: g.on is not a function

React Native Expo Web启动报错问题解答

问题

我尝试用Expo工具和Web View创建并启动React Native应用,执行步骤如下:

  • npx create-react-native app
  • cd myProjectApp
  • yarn add glob(不安装该包执行yarn web会报错)
  • yarn add react-native-web react-dom @expo/webpack-config(不安装则yarn web无法运行)
  • yarn web

执行后出现错误提示:TypeError: g.on is not a function,完整错误日志如下:

Starting project at C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest
TypeError: g.on is not a function
TypeError: g.on is not a function
    at C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\utils\glob.js:19:11
    at new Promise (<anonymous>)
    at Object.everyMatchAsync (C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\utils\glob.js:10:12)
    at C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\start\doctor\typescript\TypeScriptProjectPrerequisite.js:114:24
    at C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\utils\glob.js:56:27
    at new Promise (<anonymous>)
    at Object.wrapGlobWithTimeout (C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\utils\glob.js:49:12)
    at TypeScriptProjectPrerequisite._queryFirstTypeScriptFileAsync (C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\start\doctor\typescript\TypeScriptProjectPrerequisite.js:113:42)
    at TypeScriptProjectPrerequisite._getSetupRequirements (C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\start\doctor\typescript\TypeScriptProjectPrerequisite.js:79:43)
    at async TypeScriptProjectPrerequisite.assertImplementation (C:\xxxxxx\xxxxxx\TEST\secondReactNativeTest\.yarn\cache\@expo-cli-npm-0.7.3-b8fe3aaa8f-f1b03efbec.zip\node_modules\@expo\cli\build\src\start\doctor\typescript\TypeScriptProjectPrerequisite.js:50:24)

疑问:

  1. 为何会出现该函数缺失的问题?
  2. yarn为何未提示安装其他依赖包来解决?
  3. 缺失的具体是哪个包?

解答

1. 函数缺失的原因

手动安装的glob包版本与@expo/cli依赖的版本不兼容。@expo/cli内部使用旧版glob的事件监听API(如g.on),但你安装的新版glob已移除该API,改用Promise或回调的新写法,导致调用时触发错误。

2. yarn未提示的原因

@expo/cli本身已声明对特定版本glob的依赖,但你手动安装了更高版本的glob,覆盖了@expo/cli依赖的版本。yarn依赖解析机制优先使用你手动安装的顶层依赖,不会主动检测这种版本冲突并提示,因为它默认你明确指定了要使用该版本的包。

3. 不存在缺失的新包,问题出在版本不兼容

没有缺失的新包,核心问题是glob版本不匹配。只需卸载手动安装的glob,让@expo/cli使用自身依赖的兼容版本即可:

yarn remove glob

之后直接运行yarn web,@expo/cli会自动调用正确版本的glob,无需手动安装。

内容的提问来源于stack exchange,提问作者miltone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:50