Skip to content

配置

当从命令行运行 velite 时,Velite 会自动尝试在项目根目录中解析名为 velite.config.js 的配置文件(同时支持其他 JS 和 TS 扩展名)。

Velite 配置文件

Velite 使用 velite.config.js 作为配置文件。您可以在项目的根目录中创建它。

js
// velite.config.js
export default {
  // ...
}

TIP

配置文件支持 TypeScript、ESM 和 CommonJS。强烈推荐利用 TypeScript 的全部功能来编写配置文件。

类型化配置

为了获得更好的类型支持,Velite 提供了一个 defineConfig 恒等函数来定义配置文件的类型。

js
import { defineConfig } from 'velite'

export default defineConfig({
  // ...
})

此外,Velite 还提供了一个 UserConfig 类型来描述配置文件类型。

js
/** @type {import('velite').UserConfig} */
export default {
  // ...
}
ts
import type { UserConfig } from 'velite'

const config: UserConfig = {
  // ...
}

export default config

TIP

推荐使用 defineConfig 恒等函数来定义配置文件类型,因为它能提供更好的类型推断。

以及其他辅助定义配置文件类型的恒等函数:

  • defineCollection: 定义集合选项
  • defineLoader: 定义文件加载器

root

  • 类型: string
  • 默认值: 'content'

内容文件的根目录,相对于解析后的配置文件路径。

strict

  • 类型: boolean
  • 默认值: false

如果为 true,则在任何模式验证失败时抛出错误并终止进程。否则,会记录警告但不会终止进程。

output

  • 类型: object

输出配置。

output.data

  • 类型: string
  • 默认值: '.velite'

数据文件的输出目录,相对于解析后的配置文件路径。

output.assets

  • 类型: string
  • 默认值: 'public/static'

静态资源的目录,相对于解析后的配置文件路径。此目录应由应用程序提供静态服务。

output.base

  • 类型: '/' | `/${string}/` | `.${string}/` | `${string}:${string}/`
  • 默认值: '/static/'

资源的公共基础路径。此选项用于生成资源 URL。它应与应用程序的 base 选项相同并以斜杠结尾。

output.name

  • 类型: string
  • 默认值: '[name]-[hash:8].[ext]'

此选项决定每个输出资源的名称。资源将被写入 output.assets 选项指定的目录。您可以使用 [name][hash][ext] 模板字符串并指定长度。

output.clean

  • 类型: boolean
  • 默认值: false

是否在构建前清理输出目录。

output.format

  • 类型: 'esm' | 'cjs'
  • 默认值: 'esm'

入口文件的输出格式。

collections

  • 类型: { [name: string]: Collection }

集合定义。

collections[name].name

  • 类型: string

集合的名称。用于为集合生成类型名称。

js
const posts = defineCollection({
  name: 'Post'
})

类型名称通常是单数名词,但可以是任何有效的 TypeScript 标识符。

collections[name].pattern

  • 类型: string

集合文件的 glob 模式,基于 root

js
const posts = defineCollection({
  pattern: 'posts/*.md'
})

collections[name].single

  • 类型: boolean
  • 默认值: false

集合是否为单文件。如果为 true,则集合将被视为单个文件,输出数据将是一个对象而不是数组。

js
const site = defineCollection({
  pattern: 'site/index.yml',
  single: true
})

collections[name].schema

集合的模式。

js
const posts = defineCollection({
  schema: s.object({
    title: s.string(), // 来自 frontmatter
    description: s.string().optional(), // 来自 frontmatter
    excerpt: s.string(), // 来自 markdown 正文
    content: s.string() // 来自 markdown 正文
  })
})

loaders

  • 类型: Loader[],参见 Loader
  • 默认值: [],内置加载器: 'json', 'yaml', 'matter'

文件加载器。您可以用它来加载 Velite 不支持的文件。更多信息,请参见 自定义加载器

markdown

全局 Markdown 选项。

markdown.gfm

  • 类型: boolean
  • 默认值: true

启用 GitHub 风格 Markdown (GFM)。

markdown.removeComments

  • 类型: boolean
  • 默认值: true

移除 HTML 注释。

markdown.copyLinkedFiles

  • 类型: boolean
  • 默认值: true

将链接的文件复制到公共路径,并将其 URL 替换为公共 URL。

markdown.remarkPlugins

Remark 插件。

markdown.rehypePlugins

Rehype 插件。

mdx

全局 MDX 选项。

mdx.gfm

  • 类型: boolean
  • 默认值: true

启用 GitHub 风格 Markdown (GFM)。

mdx.removeComments

  • 类型: boolean
  • 默认值: true

移除 HTML 注释。

mdx.copyLinkedFiles

  • 类型: boolean
  • 默认值: true

将链接的文件复制到公共路径,并将其 URL 替换为公共 URL。

更多选项,请参见 MDX 编译选项

prepare

  • 类型: (data: Result<Collections>, context: Context) => Promisable<void | false>

数据准备钩子,在写入文件前执行。您可以对输出数据应用额外的处理,例如修改它们、添加缺失的数据、处理关系或将它们写入文件。如果需要,可以返回 false 来阻止默认输出到文件的操作。

js
export default defineConfig({
  collections: { posts, tags },
  prepare: (data, context) => {
    // 修改数据
    data.posts.push({ ... })
    data.tags.push({ ... })

    // 上下文
    const { config } = context
    // config 是从 `velite.config.js` 解析而来,包含默认值

    // 返回 false 以阻止默认输出到文件
  }
})

complete

  • 类型: (data: Result<Collections>, context: Context) => Promisable<void>

构建成功钩子,在构建完成后执行。您可以在构建完成后执行任何操作,例如打印一些提示信息或部署输出文件。

Distributed under the MIT License.