Apollo Federation运行报错GraphQLNonNull cannot be invoked without 'new'求助
报错根因
你遇到的报错是依赖版本不兼容导致的:@apollo/gateway@0.44.0官方适配的是graphql 15.x版本,而你安装的graphql@16.x对核心类型做了破坏性变更:所有GraphQL内置类型(包括报错提到的GraphQLNonNull)全部改为必须用new调用的ES Class,但是0.44.0版本的gateway内部调用这些类型时仍然使用旧的函数调用语法,因此触发该错误。
解决方案
两个可选方案按需选择即可:
- 方案1:降级graphql到15.x版本(兼容性最高,无需修改业务代码)
执行安装命令:npm install graphql@15.x
该版本和你当前使用的@apollo/gateway@0.44.0、apollo-server@3.5.0都完全兼容。 - 方案2:升级联邦网关到支持graphql 16的版本
如果你需要使用graphql 16的新特性,将@apollo/gateway升级到0.50.0及以上版本,同时同步升级apollo-server到对应兼容版本即可,升级前注意检查版本变更日志确认配置项是否有调整。
验证步骤
修改版本前可以先执行以下操作避免缓存影响:
- 删除项目根目录下的node_modules文件夹、package-lock.json(或yarn.lock)文件
- 按照选择的方案修改package.json中的依赖版本
- 重新执行依赖安装命令,再启动服务验证
内容的提问来源于stack exchange,提问作者xion
相关产品推荐
相关产品推荐

