集合

模式验证器

使用你喜欢的验证器定义集合模式,并实现完整类型安全。

Nuxt Content 支持使用多种验证器定义集合模式。开箱即用的支持包括流行库如 Zod v3 / v4Valibot(示例见下文)。该系统具有可扩展性,也可以通过 JSON Schema 适配器支持其他验证器。模式用于强制数据一致性,并驱动生成的类型和 Studio 表单。

使用 Zod v3

安装

pnpm add -D zod zod-to-json-schema
# 或者
npm i -D zod zod-to-json-schema

建议直接从 zod 导入 z

content.config.ts
import { defineContentConfig, defineCollection, property } from '@nuxt/content'
import { z } from 'zod' // 如果你的环境暴露了此子路径,也可以用 'zod/v3'

export default defineContentConfig({
  collections: {
    blog: defineCollection({
      type: 'page',
      source: 'blog/*.md',
      schema: z.object({
        title: z.string(),
        description: z.string().optional(),
        date: z.date(),
        draft: z.boolean().default(false),
        tags: z.array(z.string()).optional(),
        image: z.object({
          src: property(z.string()).editor({ input: 'media' }),
          alt: z.string()
        })
      })
    })
  }
})
日期在内部以 ISO 字符串格式序列化(JSON Schema 中 format: date-time)。
@nuxt/content 重新导出的 z 已废弃,将在未来版本中移除。请改为从 zod(或 zod/v3)导入 z

使用 Zod v4

Zod v4 提供原生的 JSON Schema 导出,无需依赖 zod-to-json-schema

安装

pnpm add -D zod
# 或者
npm i -D zod
content.config.ts
import { defineContentConfig, defineCollection, property } from '@nuxt/content'
import { z } from 'zod/v4'

export default defineContentConfig({
  collections: {
    docs: defineCollection({
      type: 'page',
      source: 'docs/**/*.md',
      schema: z.object({
        title: z.string(),
        description: z.string().optional(),
        updatedAt: z.date(),
        draft: z.boolean().optional(),
        tags: z.array(z.string()).optional(),
        hero: z.object({
          image: property(z.string()).editor({ input: 'media' }),
          caption: z.string().optional()
        })
      })
    })
  }
})

使用 Valibot

使用 Valibot 原语定义你的模式。

安装

pnpm add -D valibot @valibot/to-json-schema
# 或者
npm i -D valibot @valibot/to-json-schema
content.config.ts
import { defineContentConfig, defineCollection, property } from '@nuxt/content'
import { object, string, boolean, array, date, optional } from 'valibot'

export default defineContentConfig({
  collections: {
    docs: defineCollection({
      type: 'page',
      source: 'docs/**/*.md',
      schema: object({
        title: string(),
        description: optional(string()),
        updatedAt: date(),
        draft: optional(boolean()),
        tags: optional(array(string())),
        hero: object({
          image: property(string()).editor({ input: 'media' }),
          caption: optional(string())
        })
      })
    })
  }
})

如何选择验证器

  • Zod v3:经过实战考验,生态丰富;通过重新导出的 z 提供优秀的开发体验。
  • Valibot:轻量且性能优异;需自行从 valibot 导入。

只需安装并使用你需要的验证器。Nuxt Content 会自动检测已安装的支持的验证器。

对其他验证器的支持

Nuxt Content 内部将集合模式转换为 JSON Schema Draft-07。如果你喜欢的验证器可以转换为 Draft-07(或有兼容的适配器),则可以支持。目前自动检测支持 Zod(v3 和 v4)和 Valibot。如果你希望得到对其他验证器的一级支持,可以考虑在 Nuxt Content 仓库 提交 issue 或 PR。

编辑器元数据(可选)

你可以通过两个验证器的 property(...).editor({ ... }) 来丰富 Studio 字段。映射详情请参阅 Studio 文档。

了解编辑器元数据如何映射到 Studio 中的表单输入。