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

React Native Web+Webpack集成Firebase时遇require未定义错误求助

React Native Web 集成 Firebase SDK 出现 require is not defined 错误的解决方案

问题描述

使用Nx开发React Native Web项目,自定义Webpack配置原本运行正常,安装Firebase SDK并导入后出现以下错误:

Uncaught ReferenceError: require is not defined
    <anonymous> webpack://MY_PROJECT_NAME/source/./node_modules/@firebase/app/node_modules/idb/build/index.js?:2

导入方式:

import {} from 'firebase/analytics';

错误原因

错误根源在于idb(Firebase的依赖包)是CommonJS格式,但你的Webpack配置中,babel-loader排除了所有node_modules目录下的文件转译,导致idb模块中的require语法未被转换为浏览器兼容的代码,而浏览器环境本身不支持require。

解决步骤

1. 调整babel-loader的白名单规则

修改babelLoaderConfiguration中的exclude.not数组,将@firebase和idb加入白名单,让它们被babel转译:

const babelLoaderConfiguration = {
    test: /\.(tsx|jsx|ts|js|cjs)?$/,
    exclude: [
        {
            and: [
                path.resolve(appDirectory, '../node_modules'),
                path.resolve(appDirectory, 'ios'),
                path.resolve(appDirectory, 'android'),
            ],
            // 加入需要转译的Firebase相关依赖
            not: [
                path.resolve(appDirectory, '../node_modules/@firebase'),
                path.resolve(appDirectory, '../node_modules/idb'),
            ],
        },
    ],
    // ... 其他配置不变
};

2. 确认Babel配置包含必要预设

检查项目根目录的babel.config.js,确保包含@babel/preset-env,它会将CommonJS模块转换为浏览器兼容的ES模块语法:

module.exports = {
  presets: [
    '@babel/preset-env', // 确保存在这个预设
    '@babel/preset-react',
    '@babel/preset-typescript',
    'module:metro-react-native-babel-preset'
  ],
  // ... 其他插件
};

3. 可选:优化Webpack对CommonJS的处理

如果使用Webpack 5,可以添加resolve.mainFields配置,优先加载ES模块版本的依赖:

resolve: {
  // ... 现有配置
  mainFields: ['browser', 'module', 'main'],
},

验证修改

重新启动Webpack开发服务器,导入Firebase模块的代码应该能正常运行,不再出现require is not defined错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:26:16