调用自定义useUser Hook时出现无法导入MapperKind编译错误求助
问题解答
MapperKind 含义
MapperKind 是 @graphql-tools/utils 包导出的枚举常量,用于标识 GraphQL Schema 中不同的可映射元素类型,包括对象类型、字段、参数、输入类型等,是 GraphQL Tools 生态中用于 Schema 处理、Mock 生成、结构转换等逻辑的标识类常量。
错误出现原因
该错误属于模块兼容性问题,触发原因主要有两类:
- 项目使用的打包工具(如webpack)对
.mjs格式的ES模块处理规则存在缺陷,@graphql-tools/mock依赖的@graphql-tools/utils将 MapperKind 作为命名导出暴露,但打包工具识别.mjs文件时将其错误判定为 CommonJS 模块,而 CommonJS 模块仅支持读取默认导出,找不到命名导出的 MapperKind 就会抛出该错误。 - 项目中安装的
@graphql-tools/mock和@graphql-tools/utils版本不匹配,两者的导出规则不一致导致无法读取对应常量。
解决方案
- 首先对齐依赖版本:删除项目的
node_modules文件夹和锁文件(package-lock.json / yarn.lock / pnpm-lock.yaml),重新执行依赖安装命令即可:
# npm 环境 npm install # yarn 环境 yarn install # pnpm 环境 pnpm install
- 如果你使用的是 create-react-app@4.x 等旧版本脚手架,打包工具默认对
.mjs支持存在缺陷,若使用react-app-rewired自定义配置,可在config-overrides.js中添加如下规则:
module.exports = function override(config) { config.module.rules.push({ test: /\.mjs$/, include: /node_modules/, type: "javascript/auto" }); return config; }
- 临时降级方案:将
@graphql-tools/mock版本降到 v8.7.0 及以下,该版本之前的导出逻辑不会触发该兼容性问题。
额外说明:你当前编写的 useUser Hook 为无返回值逻辑,后续可调整为 return data?.me 即可拿到用户数据,该问题和当前编译错误无关。
内容的提问来源于stack exchange,提问作者Hayat
相关产品推荐
相关产品推荐

