Sanity GraphQL部署报错:自定义object类型未被识别求助
解决Sanity CMS中顶层Object类型不被识别的问题
以下是几个常见原因及对应的解决方法:
1. 顶层Object类型未在主Schema中注册
Sanity不会自动扫描所有schema文件,必须在根目录的schema.js(或schema/index.js)中显式导入并注册你的resourceObj类型:
// schema.js import createSchema from 'part:@sanity/base/schema-creator' import schemaTypes from 'all:part:@sanity/base/schema-type' import resourceObj from './objects/resourceObj' // 你的顶层object文件路径 import resourcesPage from './documents/resourcesPage' export default createSchema({ name: 'default', types: schemaTypes.concat([ resourcesPage, resourceObj // 必须添加到这里 ]) })
2. 顶层Object类型定义格式错误
确保你的resourceObj是用Sanity的defineType正确定义的,而非普通对象:
// schemas/objects/resourceObj.js import {defineType, defineField} from 'sanity' export default defineType({ name: 'resourceObj', type: 'object', title: '资源项', fields: [ defineField({ name: 'title', type: 'string', title: '标题' }), // 其他字段... ] })
如果直接写普通对象,Sanity的GraphQL生成器会无法识别这是一个合法的顶层类型。
3. 数组字段引用类型名时出错
检查resourcesPage中数组字段的of配置,确保类型名和顶层Object的name完全一致(大小写敏感):
// schemas/documents/resourcesPage.js import {defineType, defineField} from 'sanity' export default defineType({ name: 'resourcesPage', type: 'document', title: '资源页面', fields: [ defineField({ name: 'resourcesList', type: 'array', title: '资源列表', of: [{type: 'resourceObj'}] // 这里的类型名必须和resourceObj的name完全匹配 }) ] })
4. Sanity缓存或GraphQL部署未同步
- 先重启本地Sanity开发服务器:
sanity start - 清理Sanity CLI缓存:
sanity cache clear - 重新部署GraphQL API时,确保指定了正确的数据集:
sanity graphql deploy --dataset <你的数据集名称>
5. 类型命名冲突
检查是否有其他schema类型(比如文档、其他object)使用了resourceObj这个名称,重复的类型名会导致Sanity无法正确识别。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

