食谱

Transformers

Transformers 负责解析和操作 Nuxt 内容中的内容。

Nuxt 内容为每种内容类型提供了特定的 Transformers,用于解析原始内容并为查询和渲染做好准备。

您可以创建自定义 Transformers 来支持新的内容类型或改进受支持内容类型的功能。

  1. 创建您的 Transformers。Transformers 由 4 个部分组成
    • name: Transformers 名称。
    • extensions: 有效文件扩展名列表。
    • parse: 如果提供,此函数将用于解析原始内容。
    • transform: 接收已解析的内容并对其进行操作。
my-transformer.ts
// @ts-expect-error
import { defineTransformer } from '@nuxt/content/transformers'

export default defineTransformer({
  name: 'my-transformer',
  extensions: ['.names'],
  parse (_id: string, rawContent: string) {
    return {
      _id,
      body: rawContent.trim().split('\n').map(line => line.trim()).sort()
    }
  }
})
  1. 定义简单的模块来注册 Transformers
my-module.ts
import { resolve } from 'path'
import { defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup (_options, nuxt) {
    nuxt.options.nitro.externals = nuxt.options.nitro.externals || {}
    nuxt.options.nitro.externals.inline = nuxt.options.nitro.externals.inline || []
    nuxt.options.nitro.externals.inline.push(resolve('./my-module'))
    // @ts-expect-error
    nuxt.hook('content:context', (contentContext) => {
      contentContext.transformers.push(resolve('./my-module/my-transformer.ts'))
    })
  }
})
  1. 注册您的模块
nuxt.config.ts
import MyModule from './my-module/my-module'

export default defineNuxtConfig({
  modules: [
    // always put it before @nuxt/content because the transformers 
    // needs to be loaded before transformation occurs
    MyModule,
    '@nuxt/content'
  ]
})

就是这样。您可以在内容目录中创建 .names 文件。查看 Transformers 示例。