食谱

钩子

Nuxt 内容公开钩子,允许您在内容解析之前和解析之后修改内容。

该模块添加了一些可供您使用的钩子

content:file:* 钩子在 nitro 运行时可用,要使用它们,您需要创建一个自定义的 nitro 插件

server/plugins/ 目录中创建一个插件

server/plugins/content.ts
export default defineNitroPlugin((nitroApp) => {
  // ...
})

content:file:beforeParse

允许您在解析器处理文件之前修改文件内容。

参数

  • file: { _id: string, body: string }

示例

将所有 Markdown 文件中的所有 React 替换为 Vue

server/plugins/content.ts
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('content:file:beforeParse', (file) => {
    if (file._id.endsWith('.md')) {
      file.body = file.body.replace(/react/g, 'vue')
    }
  })
})

content:file:afterParse

允许您在解析器解析文档后修改文档。

参数:

  • file: { _id: string, body: any }

示例

使用内容的第一张图片作为封面图片。

server/plugins/content.ts
import { visit } from 'unist-util-visit'

export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('content:file:afterParse', (file) => {
    if (file._id.endsWith('.md')) {
      visit(file.body, (n: any) => n.tag === 'img', (node) => {
        file.coverImage = node.props.src
      })
    }
  })
})