如何在Expo + React Native Web构建中避免加载Notifications bundle?
解决Expo React Native Web中移除默认Notifications模块的问题
看起来你遇到的问题是因为Expo默认会在Web构建中包含expo-notifications模块,而你自己已经通过FCM实现了Web端通知,导致两个系统冲突——Expo的Notifications模块没有被正确初始化(缺少_emitter实例),在点击通知触发事件时直接崩溃了。下面是几种可以彻底针对Web构建移除该模块的方法:
方法1:使用expo-build-properties排除Web端的expo-notifications
这是最官方的解决方案,通过Expo的插件来精准控制不同平台的依赖打包:
首先安装所需依赖:
npx expo install expo-build-properties在你的
app.json或app.config.js中添加插件配置,明确指定Web环境排除expo-notifications:{ "expo": { "plugins": [ [ "expo-build-properties", { "web": { "exclude": ["expo-notifications"] } } ] ] } }
这个配置会告诉Expo在构建Web版本时,完全不把expo-notifications的代码打包进应用,从根源上避免冲突。
方法2:确保代码中完全不引用expo-notifications
检查你的项目代码,确保没有任何地方import了expo-notifications相关的内容——哪怕是偶然引入的类型定义或者工具函数,都可能触发Expo打包该模块。全部替换为你自己的FCM Web实现代码,比如直接使用Firebase的messaging() API处理通知接收和点击事件。
方法3:清理构建缓存
有时候旧的构建缓存会导致模块仍然被错误打包,执行以下命令清理缓存后重新启动项目:
npx expo start --clear
完成这些步骤后,Web构建就不会再包含Expo的Notifications模块了,点击通知时也只会触发你自己实现的逻辑,不会再出现_emitter is undefined的错误。
内容的提问来源于stack exchange,提问作者Alo
相关产品推荐
相关产品推荐

