You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:44:16