模式验证器
使用您首选的验证器定义集合模式,并享受完整的类型安全。
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 依赖。
安装 Zod
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 原语定义您的模式。
安装 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 文档。