使用Expo创建React Native Web应用启动报错:TypeError: g.on is not a function
React Native Expo Web启动报错问题解答
问题
我尝试用Expo工具和Web View创建并启动React Native应用,执行步骤如下:
npx create-react-native appcd myProjectAppyarn 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)
疑问:
- 为何会出现该函数缺失的问题?
- yarn为何未提示安装其他依赖包来解决?
- 缺失的具体是哪个包?
解答
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
相关产品推荐
相关产品推荐

