nuxt logo

ドキュメント翻訳(非公式)

テンプレート

Nuxt Kit はテンプレートを扱うための一連のユーティリティを提供します。これらの関数を使用すると、開発およびビルド時に追加のファイルを生成できます。

テンプレートは、開発およびビルド時に追加のファイルを生成することができます。これらのファイルは仮想ファイルシステムで利用可能になり、プラグイン、レイアウト、コンポーネントなどで使用できます。addTemplateaddTypeTemplate を使用すると、Nuxt アプリケーションにテンプレートを追加できます。updateTemplates を使用すると、フィルターに一致するテンプレートを再生成できます。

addTemplate

指定されたテンプレートをビルド時に仮想ファイルシステムにレンダリングし、オプションでプロジェクトの buildDir にディスクに書き込みます。

使用法

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' })
    })
  }
})

// @errors: 2391
import type { NuxtTemplate, ResolvedNuxtTemplate } from '@nuxt/schema'
// ---cut---
function addTemplate (template: NuxtTemplate | string): ResolvedNuxtTemplate

パラメータ

template: テンプレートオブジェクトまたはテンプレートへのパスを含む文字列。文字列が提供された場合、それは src が文字列値に設定されたテンプレートオブジェクトに変換されます。テンプレートオブジェクトが提供された場合、以下のプロパティを持っている必要があります:

プロパティ必須説明
srcstringfalseテンプレートへのパス。src が提供されない場合、代わりに getContents を提供する必要があります。
filenamestringfalseテンプレートのファイル名。filename が提供されない場合、それは src パスから生成されます。この場合、src オプションが必要です。
dststringfalse目的のファイルへのパス。dst が提供されない場合、それは filename パスと nuxt の buildDir オプションから生成されます。
optionsOptionsfalseテンプレートに渡すオプション。
getContents(data: Options) => string | Promise<string>falseoptions オブジェクトと共に呼び出される関数。文字列または文字列に解決されるプロミスを返す必要があります。src が提供されている場合、この関数は無視されます。
writebooleanfalsetrue に設定されている場合、テンプレートは目的のファイルに書き込まれます。そうでない場合、テンプレートは仮想ファイルシステムでのみ使用されます。

ランタイムプラグイン用の仮想ファイルを作成する

この例では、モジュール内でオブジェクトをマージし、その結果をランタイムプラグインで使用します。

module.ts
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' }),
    })
  },
})

上記のモジュールでは、meta.config.mjs という名前の仮想ファイルを生成します。ランタイムプラグインでは、#build エイリアスを使用してそれをインポートできます。

runtime/plugin.ts
import { createHead as createServerHead } from '@unhead/vue/server'
import { createHead as createClientHead } from '@unhead/vue/client'
import { defineNuxtPlugin } from '#imports'
// @ts-ignore
import metaConfig from '#build/meta.config.mjs'

export default defineNuxtPlugin((nuxtApp) => {
  const createHead = import.meta.server ? createServerHead : createClientHead
  const head = createHead()
  head.push(metaConfig.globalMeta)

  nuxtApp.vueApp.use(head)
})

addTypeTemplate

指定されたテンプレートをビルド時にプロジェクトの buildDir にレンダリングし、型として登録します。

使用法

import { addTypeTemplate, defineNuxtModule } from '@nuxt/kit'

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

function addTypeTemplate (template: NuxtTypeTemplate | string, context?: { nitro?: boolean, nuxt?: boolean }): ResolvedNuxtTemplate

パラメータ

template: テンプレートオブジェクトまたはテンプレートへのパスを含む文字列。文字列が提供された場合、それは src が文字列値に設定されたテンプレートオブジェクトに変換されます。テンプレートオブジェクトが提供された場合、以下のプロパティを持っている必要があります:

プロパティ必須説明
srcstringfalseテンプレートへのパス。src が提供されない場合、代わりに getContents を提供する必要があります。
filenamestringfalseテンプレートのファイル名。filename が提供されない場合、それは src パスから生成されます。この場合、src オプションが必要です。
dststringfalse目的のファイルへのパス。dst が提供されない場合、それは filename パスと nuxt の buildDir オプションから生成されます。
optionsOptionsfalseテンプレートに渡すオプション。
getContents(data: Options) => string | Promise<string>falseoptions オブジェクトと共に呼び出される関数。文字列または文字列に解決されるプロミスを返す必要があります。src が提供されている場合、この関数は無視されます。

context: 型が追加される場所を制御するためにオプションのコンテキストオブジェクトを渡すことができます。省略された場合、型は Nuxt コンテキストにのみ追加されます。このオブジェクトは以下のプロパティをサポートします:

プロパティ必須説明
nuxtbooleanfalsetrue に設定されている場合、型は Nuxt コンテキストに追加されます。
nitrobooleanfalsetrue に設定されている場合、型は Nitro コンテキストに追加されます。

Nitro コンテキストに型テンプレートを追加する

デフォルトでは、型宣言は Nuxt コンテキストにのみ追加されます。それらを Nitro コンテキストにも追加するには、nitro を true に設定します。

import { addTypeTemplate, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    addTypeTemplate({
      filename: 'types/auth.d.ts',
      getContents: () => `declare module '#auth-utils' {
  interface User {
    id: string;
    name: string;
  }

}`,
    }, {
      nitro: true,
    })
  },
})

これにより、#auth-utils モジュールを Nitro コンテキスト内で使用できるようになります。

server/api/auth.ts
import type { User } from '#auth-utils'

export default eventHandler(() => {
  const user: User = {
    id: '123',
    name: 'John Doe',
  }

  // ユーザーに対して何らかの操作を行う

  return user
})

addServerTemplate

Nuxt Nitro サーバービルド内で使用できる仮想ファイルを追加します。

使用法

import { addServerTemplate, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    addServerTemplate({
      filename: '#my-module/test.mjs',
      getContents () {
        return 'export const test = 123'
      },
    })
  },
})

// @errors: 2391
import type { NuxtServerTemplate } from '@nuxt/schema'
// ---cut---
function addServerTemplate (template: NuxtServerTemplate): NuxtServerTemplate

パラメータ

template: テンプレートオブジェクト。以下のプロパティを持っている必要があります:

プロパティ必須説明
filenamestringtrueテンプレートのファイル名。
getContents() => string | Promise<string>trueoptions オブジェクトと共に呼び出される関数。文字列または文字列に解決されるプロミスを返す必要があります。

Nitro 用の仮想ファイルを作成する

この例では、Nuxt Nitro サーバービルド内で使用できる仮想ファイルを作成します。

import { addServerTemplate, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    addServerTemplate({
      filename: '#my-module/test.mjs',
      getContents () {
        return 'export const test = 123'
      },
    })
  },
})

そしてランタイムファイルで

server/api/test.ts
import { test } from '#my-module/test.js'

export default eventHandler(() => {
  return test
})

updateTemplates

フィルターに一致するテンプレートを再生成します。フィルターが提供されない場合、すべてのテンプレートが再生成されます。

使用法

import { defineNuxtModule, updateTemplates } from '@nuxt/kit'
import { resolve } from 'pathe'

export default defineNuxtModule({
  setup (options, nuxt) {
    const updateTemplatePaths = [
      resolve(nuxt.options.srcDir, 'pages'),
    ]
    // ページのいずれかが変更されたときにルートテンプレートリストを監視して再構築する
    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',
        })
      }
    })
  },
})

async function updateTemplates (options: UpdateTemplatesOptions): void

パラメータ

options: テンプレートに渡すオプション。このオブジェクトは以下のプロパティを持つことができます:

プロパティ必須説明
filter(template: ResolvedNuxtTemplate) => booleanfalsetemplate オブジェクトと共に呼び出される関数。テンプレートを再生成するかどうかを示すブール値を返す必要があります。filter が提供されない場合、すべてのテンプレートが再生成されます。