引言
什么是 Velite?
Velite 是一个用于构建类型安全数据层的工具,它通过 Zod 模式将 Markdown / MDX、YAML、JSON 或其他文件转换为应用程序的数据层。
命名由来
"Velite" 源自英文单词 "elite"(精英)。
"Velite" 本身也是拿破仑精锐部队的代号。
核心特性
- 易于使用:将您的内容放入
content文件夹,定义集合模式,运行velite,然后在应用程序中使用输出数据。 - 类型安全:通过 Zod 进行内容模式验证,并为 TypeScript 生成类型定义。
- 框架无关:输出 JSON、Entry 和 DTS,开箱即用地支持任何 JavaScript 框架或库。
- 轻量级:选择更多原生 API 而非臃肿的 NPM 模块,运行时依赖更少,因此快速高效。
- 依然强大:内置 Markdown / MDX、YAML、JSON 支持,相对文件和图像处理,模式验证等。
- 可配置:输入和输出目录均可自定义,并支持自定义加载器、钩子等。
- 可扩展:通过自定义加载器支持任何文件类型,通过自定义模式进行字段验证和转换,通过钩子支持任何输出格式。
查看我们详细的 为何选择 Velite 以了解更多关于 Velite 的特别之处。✨
在线尝试 Velite
您可以在 StackBlitz 上直接于浏览器中尝试 Velite。它在浏览器中直接运行 Velite,与本地设置几乎相同,但无需在您的机器上安装任何东西。
谁在使用 Velite?
为何选择 Velite?
类型安全的内容
Velite 通过 Zod 模式验证您的内容,并为 TypeScript 生成类型定义。因此您可以放心地在应用程序中使用输出数据。
完整的类型推断
- 为每个集合自动生成 TypeScript 类型定义
- 支持 IDE 智能感知、自动补全、类型检查、重构等
完全可控的内容转换
- 单字段转换:ts
title: s.string().transform(value => value.toUpperCase()) - 单集合转换:ts
schema: s.object({ title: s.string(), slug: s.string() }).transform(value => ({ ...value, url: `/blog/${value.slug}` })) - 所有集合转换:ts
defineConfig({ prepare: async ({ posts, tags }) => { posts.push({ title: 'Hello World', slug: 'hello-world', tags: ['hello', 'world'] }) tags.push({ name: 'Hello', slug: 'hello' }) } })
友好的错误报告

- 错误报告友好,显示包含文件路径和属性路径的错误信息
框架无关
Velite 是框架无关的,开箱即用地支持 React、Vue、Svelte、Solid 等。
更少的运行时依赖
快速重建
超过 1000 个文档和 2000 个资源文件,冷启动时间少于 8 秒,热重建时间少于 60 毫秒。
更多信息请参考 Velite 基准测试。
为什么不选择 Contentlayer?
Contentlayer 是一个很棒的工具,但它不再维护,并且不符合我的需求。例如:
- 内置的文件和图像处理
- 可编程性和可扩展性
- 自定义集合模式验证
- 友好的错误报告
- 等。
Velite 的灵感来自 Contentlayer。