Nuxt Nation 大会即将到来。加入我们,时间为 11 月 12-13 日。

模板

Nuxt Kit 提供了一组实用程序,可帮助您使用模板。这些函数允许您在开发和构建时生成额外的文件。

模板允许在开发和构建时生成额外的文件。这些文件将在虚拟文件系统中可用,并且可以在插件、布局、组件等中使用。addTemplateaddTypeTemplate 允许您向 Nuxt 应用程序添加模板。updateTemplates 允许您重新生成与过滤器匹配的模板。

addTemplate

在构建期间将给定的模板渲染到项目 buildDir 中。

类型

function addTemplate (template: NuxtTemplate | string): ResolvedNuxtTemplate

interface NuxtTemplate {
  src?: string
  filename?: string
  dst?: string
  options?: Record<string, any>
  getContents?: (data: Record<string, any>) => string | Promise<string>
  write?: boolean
}

interface ResolvedNuxtTemplate {
  src: string
  filename: string
  dst: string
  options: Record<string, any>
  getContents: (data: Record<string, any>) => string | Promise<string>
  write: boolean
  filename: string
  dst: string
}

参数

template

类型: NuxtTemplate | string

必填: true

一个模板对象或一个指向模板的字符串路径。如果提供了一个字符串,它将被转换为一个模板对象,其中 src 设置为字符串值。如果提供了一个模板对象,它必须具有以下属性

  • src (可选)
    类型: string
    模板的路径。如果未提供 src,则必须改用 getContents
  • filename (可选)
    类型: string
    模板的文件名。如果未提供 filename,则将从 src 路径生成。在这种情况下,需要 src 选项。
  • dst (可选)
    类型: string
    目标文件的路径。如果未提供 dst,则将从 filename 路径和 nuxt buildDir 选项生成。
  • options (可选)
    类型: Options
    传递给模板的选项。
  • getContents (可选)
    类型: (data: Options) => string | Promise<string>
    一个将使用 options 对象调用的函数。它应该返回一个字符串或一个解析为字符串的 promise。如果提供了 src,则将忽略此函数。
  • write (可选)
    类型: boolean
    如果设置为 true,则模板将写入目标文件。否则,模板将仅在虚拟文件系统中使用。

示例

// https://github.com/nuxt/bridge
import { addTemplate, defineNuxtModule } from '@nuxt/kit'
import { defu } from 'defu'

export default defineNuxtModule({
  setup(options, nuxt) {
    const globalMeta = defu(nuxt.options.app.head, {
      charset: options.charset,
      viewport: options.viewport
    })

    addTemplate({
      filename: 'meta.config.mjs',
      getContents: () => 'export default ' + JSON.stringify({ globalMeta, mixinKey: 'setup' })
    })
  }
})

addTypeTemplate

在构建期间将给定的模板渲染到项目 buildDir 中,然后将其注册为类型。

类型

function addTypeTemplate (template: NuxtTypeTemplate | string): ResolvedNuxtTemplate

interface NuxtTemplate {
  src?: string
  filename?: string
  dst?: string
  options?: Record<string, any>
  getContents?: (data: Record<string, any>) => string | Promise<string>
}

interface ResolvedNuxtTemplate {
  src: string
  filename: string
  dst: string
  options: Record<string, any>
  getContents: (data: Record<string, any>) => string | Promise<string>
  write: boolean
  filename: string
  dst: string
}

参数

template

类型: NuxtTypeTemplate | string

必填: true

一个模板对象或一个指向模板的字符串路径。如果提供了一个字符串,它将被转换为一个模板对象,其中 src 设置为字符串值。如果提供了一个模板对象,它必须具有以下属性

  • src (可选)
    类型: string
    模板的路径。如果未提供 src,则必须改用 getContents
  • filename (可选)
    类型: string
    模板的文件名。如果未提供 filename,则将从 src 路径生成。在这种情况下,需要 src 选项。
  • dst (可选)
    类型: string
    目标文件的路径。如果未提供 dst,则将从 filename 路径和 nuxt buildDir 选项生成。
  • options (可选)
    类型: Options
    传递给模板的选项。
  • getContents (可选)
    类型: (data: Options) => string | Promise<string>
    一个将使用 options 对象调用的函数。它应该返回一个字符串或一个解析为字符串的 promise。如果提供了 src,则将忽略此函数。

示例

// https://github.com/Hebilicious/nuxtpress
import { addTypeTemplate, defineNuxtModule } from "@nuxt/kit"

export default defineNuxtModule({
  setup() {
    addTypeTemplate({
      filename: "types/markdown.d.ts",
      getContents: () => /* ts */`
      declare module '*.md' {
        import type { ComponentOptions } from 'vue'
        const Component: ComponentOptions
        export default Component
      }`
    })
  }
}

updateTemplates

重新生成与过滤器匹配的模板。如果未提供过滤器,则将重新生成所有模板。

类型

async function updateTemplates (options: UpdateTemplatesOptions): void

interface UpdateTemplatesOptions {
  filter?: (template: ResolvedNuxtTemplate) => boolean
}

interface ResolvedNuxtTemplate {
  src: string
  filename: string
  dst: string
  options: Record<string, any>
  getContents: (data: Record<string, any>) => string | Promise<string>
  write: boolean
  filename: string
  dst: string
}

参数

options

类型: UpdateTemplatesOptions

默认值: {}

传递给模板的选项。此对象可以具有以下属性

  • filter (可选)
    类型: (template: ResolvedNuxtTemplate) => boolean
    一个将使用 template 对象调用的函数。它应该返回一个布尔值,指示是否应该重新生成模板。如果未提供 filter,则将重新生成所有模板。

示例

// https://github.com/nuxt/nuxt
import { defineNuxtModule, updateTemplates } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options, nuxt) {
    // watch and rebuild routes template list when one of the pages changes
    nuxt.hook('builder:watch', async (event, relativePath) => {
      if (event === 'change') { return }

      const path = resolve(nuxt.options.srcDir, relativePath)
      if (updateTemplatePaths.some(dir => path.startsWith(dir))) {
        await updateTemplates({
          filter: template => template.filename === 'routes.mjs'
        })
      }
    })
  }
})