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

React Native 0.74.5+GraphQL Codegen报错:undefined is not a function

React Native 0.74.5 + GraphQL Codegen 启动报错「undefined is not a function」解决方案

问题背景

基于React Native 0.74.5开发的项目,使用GraphQL Codegen生成类型与hooks时,出现「undefined is not a function」错误导致应用无法启动。已尝试删除生成文件重生成、重装依赖、配置Metro支持cjs文件,但问题未解决。

可能的原因与解决方案

1. 调整Codegen的模块导入配置

React Native 0.74+默认支持ES模块,emitLegacyCommonJSImports: true会强制生成CommonJS风格的导入,容易和RN的模块系统冲突。同时optimizeDocumentNode选项在RN环境下可能引发未定义函数问题,建议调整:

修改codegen.ts中的关键配置:

const config: CodegenConfig = {
  // ...其他原有配置
  emitLegacyCommonJSImports: false, // 关闭CommonJS导入生成
  generates: {
    'src/graphql/index.ts': {
      plugins: [
        {
          'fragment-matcher': {
            useExplicitTyping: true,
            // 移除module: 'es2015'配置,让插件适配当前模块系统
          },
        },
        {
          'typescript-react-apollo': {
            dedupeFragments: true,
            optimizeDocumentNode: false, // 先禁用该优化选项
            addDocBlocks: false,
            withComponent: false,
            withHooks: true,
            withMutationOptionsType: false,
          },
        },
      ],
    },
    // ...其他generates配置
  },
};

修改完成后,删除旧的生成文件,重新执行Codegen命令生成代码。

2. 调整Metro的文件解析顺序

Metro的sourceExts顺序会影响文件优先级,确保TypeScript相关后缀排在前面,避免解析错误:

修改metro.config.js的resolver部分:

resolver: {
  assetExts: assetExts.filter(ext => ext !== 'svg'),
  sourceExts: process.env.RN_SRC_EXT
    ? [...process.env.RN_SRC_EXT.split(','), 'tsx', 'ts', 'jsx', 'js', 'svg', 'cjs']
    : ['tsx', 'ts', 'jsx', 'js', 'svg', 'cjs'],
},

3. 检查生成代码中的未定义函数

打开生成的src/graphql/index.ts文件,根据错误栈定位到报错的函数调用位置,确认是否存在:

  • 函数未正确导入(比如Apollo Client相关工具函数)
  • fragment matcher生成的代码存在语法或导入错误

如果发现是fragment matcher的问题,可以尝试暂时移除该插件,先确认基础的hooks生成是否正常,再逐步添加插件排查。

4. 确认依赖版本兼容性

确保@graphql-codegen/cli、@graphql-codegen/typescript-react-apollo等插件版本与React Native 0.74.5、Apollo Client版本匹配。比如使用Apollo Client 3.x时,需确保Codegen插件为对应兼容版本,避免因版本不匹配导致的函数未定义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:03:16