Amplify Codegen报错:API命名空间无导出成员问题求助
AWS Amplify Codegen 无参数操作类型缺失问题诊断与解决
问题描述
Web应用依赖AWS Cognito用户池、AppSync GraphQL API,这些资源在独立项目维护。修改资源时,一直通过以下amplify命令删除后重新导入:
$ amplify remove auth ... $ amplify remove api ... $ amplify import auth ... $ amplify codegen add --apiId <my API ID> ...
该流程此前正常运行数月,近期执行删导操作后,amplify codegen生成的TypeScript代码出现编译错误:仅4个无需参数的GraphQL操作报错,所有带参数的查询、变更、订阅对应的类型均正常生成且编译通过。
典型报错信息:
ERROR in src/graphql/queries.ts:21:30 TS2694: Namespace "<path to project>/src/API" has no exported member 'SomeAPIOperationQueryVariables'. ERROR in src/graphql/subscriptions.ts:25:12 TS2724: "<path to project>/src/API" has no exported member named 'AThirdAPIOperationVariables'. Did you mean 'AThirdAPIOperation'?
已尝试重新执行导入流程、删除本地Amplify文件、重置云端资源后amplify init、拉取全新代码库等操作,问题仍存在。API及架构本身无问题,在其他项目可正常运行。
诊断与解决步骤
- 检查Amplify CLI版本:不同版本的
amplify codegen对无参数操作的变量类型生成逻辑可能存在差异。执行amplify codegen --version查看版本,若不是最新稳定版,执行npm install -g @aws-amplify/cli升级,之后重新执行amplify codegen add和amplify codegen generate。 - 验证
API.ts生成内容:打开自动生成的src/API.ts,确认无参数操作的变量类型是否缺失。例如无参数查询SomeAPIOperation,正常应生成SomeAPIOperationQueryVariables(即使是空对象类型)。若确实缺失,可手动临时添加以下代码验证:
重新编译后若错误消失,可确认是codegen的生成逻辑问题。// 在API.ts末尾添加临时类型 export type SomeAPIOperationQueryVariables = {}; export type AnotherAPIOperationQueryVariables = {}; export type AThirdAPIOperationVariables = {}; export type AFourthAPIOperationSubscriptionVariables = {}; - 检查GraphQL操作定义格式:打开报错的
queries.ts/subscriptions.ts,确认无参数操作的定义是否存在语法问题,比如多余的空参数括号:
这类格式问题会导致codegen无法正确识别变量类型(即使无参数)。// 错误写法(多余空括号) query SomeAPIOperation() { ... } // 正确写法 query SomeAPIOperation { ... } - 清理codegen缓存:删除本地
.amplify/generated目录(若存在),执行amplify codegen generate --clear强制重新生成所有类型文件。 - 检查Amplify项目配置:查看
amplify/backend/api/<api-name>/parameters.json确认apiId是否正确;检查amplify/backend/api/<api-name>/codegen.ts中的生成规则,是否存在排除无参数操作的配置。 - 手动同步Schema:从AppSync控制台下载最新的Schema文件,替换本地
amplify/backend/api/<api-name>/schema.graphql,然后执行amplify codegen generate,验证是否能生成正确的变量类型。
内容的提问来源于stack exchange,提问作者ssc
相关产品推荐
相关产品推荐

