Nuxt Nation カンファレンスが開催されます。11月12〜13日にご参加ください。
Nuxt Kit は、Nitro を操作するのに役立つユーティリティのセットを提供します。これらの関数を使用すると、サーバー ハンドラー、プラグイン、プリレンダリング ルートを追加できます。

Nitro は、超高速 Web サーバーを構築するためのオープンソースの TypeScript フレームワークです。Nuxt はサーバー エンジンとして Nitro を使用します。 useNitro を使用して Nitro インスタンスにアクセスし、addServerHandler を使用してサーバー ハンドラーを追加し、addDevServerHandler を使用して開発モードでのみ使用されるサーバー ハンドラーを追加し、addServerPlugin を使用して Nitro のランタイム動作を拡張するプラグインを追加し、addPrerenderRoutes を使用して Nitro によってプリレンダリングされるルートを追加できます。

addServerHandler

Nitro サーバー ハンドラーを追加します。サーバーミドルウェアまたはカスタムルートを作成する場合に使用します。

function addServerHandler (handler: NitroEventHandler): void

export interface NitroEventHandler {
  handler: string;
  route?: string;
  middleware?: boolean;
  lazy?: boolean;
  method?: string;
}

パラメータ

handler

: NitroEventHandler

必須: true

次のプロパティを持つハンドラーオブジェクト

  • handler (必須)
    : string
    イベントハンドラーへのパス。
  • route (オプション)
    : string
    パスプレフィックスまたはルート。空の文字列が使用されている場合、ミドルウェアとして使用されます。
  • middleware (オプション)
    : boolean
    これがミドルウェアハンドラーであることを指定します。ミドルウェアはすべてのルートで呼び出され、通常は次のハンドラーに渡すために何も返しません。
  • lazy (オプション)
    : boolean
    遅延ローディングを使用してハンドラーをインポートします。
  • method (オプション)
    : string
    ルーター メソッド マッチャー。ハンドラー名にメソッド名が含まれている場合は、デフォルト値として使用されます。

// https://github.com/nuxt-modules/robots
import { createResolver, defineNuxtModule, addServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const resolver = createResolver(import.meta.url)

    addServerHandler({
      route: '/robots.txt'
      handler: resolver.resolve('./runtime/robots.get.ts')
    })
  }
})

addDevServerHandler

開発モードでのみ使用される Nitro サーバー ハンドラーを追加します。このハンドラーは、本番ビルドから除外されます。

function addDevServerHandler (handler: NitroDevEventHandler): void

export interface NitroDevEventHandler {
  handler: EventHandler;
  route?: string;
}

パラメータ

handler

: NitroEventHandler

必須: true

次のプロパティを持つハンドラーオブジェクト

  • handler (必須)
    : string
    イベントハンドラー。
  • route (オプション)
    : string
    パスプレフィックスまたはルート。空の文字列が使用されている場合、ミドルウェアとして使用されます。

import { createResolver, defineNuxtModule, addDevServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    const resolver = createResolver(import.meta.url)

    addDevServerHandler({
      handler: () => {
        return {
          body: `Response generated at ${new Date().toISOString()}`
        }
      },
      route: '/_handler'
    })
  }
})
// https://github.com/nuxt-modules/tailwindcss
import { joinURL } from 'ufo'
import { defineNuxtModule, addDevServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  async setup(options) {
    const route = joinURL(nuxt.options.app?.baseURL, '/_tailwind')

    // @ts-ignore
    const createServer = await import('tailwind-config-viewer/server/index.js').then(r => r.default || r) as any
    const viewerDevMiddleware = createServer({ tailwindConfigProvider: () => options, routerPrefix: route }).asMiddleware()

    addDevServerHandler({ route, handler: viewerDevMiddleware })
  }
})

useNitro

Nitro インスタンスを返します。

ready フックの後でのみ、useNitro() を呼び出すことができます。
Nitro インスタンス構成への変更は適用されません。

function useNitro (): Nitro

export interface Nitro {
  options: NitroOptions;
  scannedHandlers: NitroEventHandler[];
  vfs: Record<string, string>;
  hooks: Hookable<NitroHooks>;
  unimport?: Unimport;
  logger: ConsolaInstance;
  storage: Storage;
  close: () => Promise<void>;
  updateConfig: (config: NitroDynamicConfig) => void | Promise<void>;
}

// https://github.com/nuxt/nuxt/blob/4e05650cde31ca73be4d14b1f0d23c7854008749/packages/nuxt/src/core/nuxt.ts#L404
import { defineNuxtModule, useNitro, addPlugin, createResolver } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options, nuxt) {
    const resolver = createResolver(import.meta.url)

    nuxt.hook('ready', () => {
      const nitro = useNitro()
      if (nitro.options.static && nuxt.options.experimental.payloadExtraction === undefined) {
        console.warn('Using experimental payload extraction for full-static output. You can opt-out by setting `experimental.payloadExtraction` to `false`.')
        nuxt.options.experimental.payloadExtraction = true
      }
      nitro.options.replace['process.env.NUXT_PAYLOAD_EXTRACTION'] = String(!!nuxt.options.experimental.payloadExtraction)
      nitro.options._config.replace!['process.env.NUXT_PAYLOAD_EXTRACTION'] = String(!!nuxt.options.experimental.payloadExtraction)

      if (!nuxt.options.dev && nuxt.options.experimental.payloadExtraction) {
        addPlugin(resolver.resolve(nuxt.options.appDir, 'plugins/payload.client'))
      }
    })
  }
})

addServerPlugin

Nitro のランタイム動作を拡張するプラグインを追加します。

Nitro ドキュメントで Nitro プラグインについて詳しく読むことができます。

function addServerPlugin (plugin: string): void

パラメータ

plugin

: string

必須: true

プラグインへのパス。プラグインは、Nitro インスタンスを引数として受け入れる関数をエクスポートする必要があります。

import { createResolver, defineNuxtModule, addServerPlugin } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    const resolver = createResolver(import.meta.url)
    addServerPlugin(resolver.resolve('./runtime/plugin.ts'))
  }
})

addPrerenderRoutes

プリレンダリングされるルートを Nitro に追加します。

function function addPrerenderRoutes (routes: string | string[]): void

パラメータ

routes

: string | string[]

必須: true

プリレンダリングするルートまたはルートの配列。

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

export default defineNuxtModule({
  meta: {
    name: 'nuxt-sitemap',
    configKey: 'sitemap',
  },
  defaults: {
    sitemapUrl: '/sitemap.xml',
    prerender: true,
  },
  setup(options) {
    if (options.prerender) {
      addPrerenderRoutes(options.sitemapUrl)
    }
  }
})

addServerImportsDir

Nitro による自動インポートのためにスキャンされるディレクトリを追加します。

function addServerImportsDir (dirs: string | string[], opts: { prepend?: boolean }): void

パラメータ

dirs

: string | string[]

必須: true

Nitro によってスキャンされるように登録するディレクトリまたはディレクトリの配列

import { defineNuxtModule, createResolver, addServerImportsDir } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: 'my-module',
    configKey: 'myModule',
  },
  setup(options) {
    const resolver = createResolver(import.meta.url)
    addServerImportsDir(resolver.resolve('./runtime/server/utils'))
  }
})

addServerScanDir

Nitro によってスキャンされるディレクトリを追加します。サブディレクトリがチェックされ、~/server フォルダーと同様に登録されます。

function addServerScanDir (dirs: string | string[], opts: { prepend?: boolean }): void

パラメータ

dirs

: string | string[]

必須: true

サーバーディレクトリとして Nitro によってスキャンされるように登録するディレクトリまたはディレクトリの配列。

import { defineNuxtModule, createResolver, addServerScanDir } from '@nuxt/kit'
export default defineNuxtModule({
  meta: {
    name: 'my-module',
    configKey: 'myModule',
  },
  setup(options) {
    const resolver = createResolver(import.meta.url)
    addServerScanDir(resolver.resolve('./runtime/server'))
  }
})