npm run graphql-deploy命令在Sanity中运行卡住无法部署如何解决?
故障原因
@sanity/cli版本存在已知bug,低于3.14.0版本的Sanity CLI存在GraphQL部署完成后不主动终止进程的问题,会卡在部署成功地址输出环节无后续响应。- 部署命令缺少非交互参数,默认的
sanity graphql deploy命令会触发是否生成playground的交互式确认,无用户输入时会一直挂起。 - Lerna子命令信号传递异常,根目录执行
npm run graphql-deploy时,Lerna调用子包的部署脚本后,未正确接收子进程返回的终止信号,导致父进程一直挂起。 - 网络拦截问题,本地代理、防火墙或DNS配置异常,导致Sanity部署请求的状态确认回执无法正常返回,进程持续等待确认信息。
- GraphQL schema隐性异常,schema中存在的边界语法错误、未声明的自定义类型引用等问题,会导致部署校验阶段陷入死循环。
修复方案
- 升级Sanity CLI版本:在studio目录执行
npm install @sanity/cli@latest,全局安装Sanity CLI的用户同步执行npm install -g @sanity/cli@latest。 - 补充非交互部署参数:修改studio目录下的部署脚本,添加
--yes参数跳过交互式确认,调整后命令为sanity graphql deploy --yes。 - 调整Lerna执行配置:修改根目录package.json中的
graphql-deploy脚本为lerna run graphql-deploy --stream --no-prefix,确保子进程输出与信号正常传递到父进程。 - 排查网络问题:临时关闭本地代理、防火墙后重试部署,确认是否为网络拦截导致的进程挂起。
- 本地预校验schema:在studio目录执行
npx sanity graphql validate,排查并修复schema中存在的语法错误与类型引用问题。 - 强制进程终止:若以上操作均无效,修改studio目录package.json中的
graphql-deploy脚本为sanity graphql deploy --yes && exit 0,强制进程在部署逻辑执行完成后主动退出。

内容的提问来源于stack exchange,提问作者Aman Sharma
相关产品推荐
相关产品推荐

