Skip to content

引言

WARNING

🚧 本文档目前尚未完成。但功能已基本稳定,不过仍有可能进行重大变更。

不过,我已经提供了一些示例供您参考。

什么是 Velite?

Velite 是一个用于构建类型安全数据层的工具,它通过 Zod 模式将 Markdown / MDX、YAML、JSON 或其他文件转换为应用程序的数据层。

Velite 工作流Velite 工作流

命名由来

"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 等。

更少的运行时依赖

  • 用户配置包由 ESBuild 处理
  • 集合模式验证由 Zod 处理
  • 内容转换由 Unified 处理
  • 图像处理由 Sharp 处理
  • 文件监视由 Chokidar 处理

快速重建

超过 1000 个文档和 2000 个资源文件,冷启动时间少于 8 秒,热重建时间少于 60 毫秒

更多信息请参考 Velite 基准测试

为什么不选择 Contentlayer?

Contentlayer 是一个很棒的工具,但它不再维护,并且不符合我的需求。例如:

  • 内置的文件和图像处理
  • 可编程性和可扩展性
  • 自定义集合模式验证
  • 友好的错误报告
  • 等。

Velite 的灵感来自 Contentlayer

Distributed under the MIT License.