集合
模式验证器
使用你喜欢的验证器定义集合模式,并实现完整类型安全。
Nuxt Content 支持使用多种验证器定义集合模式。开箱即用的支持包括流行库如 Zod v3 / v4 和 Valibot(示例见下文)。该系统具有可扩展性,也可以通过 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 文档。