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

如何在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的插件来精准控制不同平台的依赖打包:

  1. 首先安装所需依赖:

    npx expo install expo-build-properties
    
  2. 在你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:10