Nitro

ソース
Nuxt Kit は、Nitro を扱うためのユーティリティセットを提供します。これらの関数を使用すると、サーバーハンドラー、プラグイン、およびプリレンダリングルートを追加できます。

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

addServerHandler

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

使用方法

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

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

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

タイプ

function addServerHandler (handler: NitroEventHandler): void

パラメーター

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

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

基本的な使い方

addServerHandler を使用して、モジュールからサーバーハンドラーを追加できます。

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

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

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

/robots.txt にアクセスすると、次の応答が返されます。

User-agent: *
Disallow: /

addDevServerHandler

開発モードでのみ使用される Nitro サーバーハンドラーを追加します。このハンドラーはプロダクションビルドから除外されます。

使用方法

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

export default defineNuxtModule({
  setup () {
    addDevServerHandler({
      handler: defineEventHandler(() => {
        return {
          body: `Response generated at ${new Date().toISOString()}`,
        }
      }),
      route: '/_handler',
    })
  },
})

タイプ

function addDevServerHandler (handler: NitroDevEventHandler): void

パラメーター

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

プロパティタイプ必須説明
handlerEventHandlertrueイベントハンドラー。
route文字列falseパスプレフィックスまたはルート。空の文字列が使用された場合、ミドルウェアとして使用されます。

基本的な使い方

場合によっては、Tailwind config viewer のような開発目的のサーバーハンドラーを特別に作成したいことがあります。

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

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

    // @ts-expect-error - tailwind-config-viewer does not have correct types
    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 インスタンスを返します。

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

使用方法

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

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

    nuxt.hook('ready', () => {
      const nitro = useNitro()
      // Do something with Nitro instance
    })
  },
})

タイプ

function useNitro (): Nitro

addServerPlugin

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

Nitro プラグインの詳細については、Nitro ドキュメント.
プラグインファイル内で nitropack/runtime から defineNitroPlugin を明示的にインポートする必要があります。useRuntimeConfig などのユーティリティにも同じ要件が適用されます。

使用方法

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

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

タイプ

function addServerPlugin (plugin: string): void

パラメーター

プロパティタイプ必須説明
plugin文字列trueプラグインへのパス。プラグインは、Nitro インスタンスを引数として受け取るデフォルト関数をエクスポートする必要があります。

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

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

addPrerenderRoutes

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

使用方法

import { addPrerenderRoutes, defineNuxtModule } 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)
    }
  },
})

タイプ

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

パラメーター

プロパティタイプ必須説明
routesstring | string[]trueプリレンダリングするルート、またはルートの配列。

addServerImports

サーバーにインポートを追加します。これにより、手動でインポートすることなく、Nitro でインポートが利用できるようになります。

使用方法

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

export default defineNuxtModule({
  setup (options) {
    const names = [
      'useStoryblok',
      'useStoryblokApi',
      'useStoryblokBridge',
      'renderRichText',
      'RichTextSchema',
    ]

    names.forEach(name =>
      addServerImports({ name, as: name, from: '@storyblok/vue' }),
    )
  },
})

タイプ

function addServerImports (dirs: Import | Import[]): void

パラメーター

imports: 次のプロパティを持つオブジェクトまたはオブジェクトの配列

プロパティタイプ必須説明
name文字列true検出されるインポート名。
from文字列trueインポート元のモジュール指定子。
prioritynumberfalseインポートの優先度。複数のインポートが同じ名前を持つ場合、最も高い優先度のものが使用されます。
disabledブール値falseこのインポートが無効になっている場合。
metaRecord<string, any>falseインポートのメタデータ。
タイプブール値falseこのインポートが純粋な型インポートの場合。
typeFrom文字列false型宣言を生成する際に、これを from 値として使用します。
as文字列falseこの名前でインポートします。

addServerImportsDir

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

使用方法

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

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

タイプ

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

パラメーター

プロパティタイプ必須説明
dirsstring | string[]trueNitro によってスキャンされるように登録するディレクトリ、またはディレクトリの配列。
opts{ prepend?: boolean }falseインポートディレクトリのオプション。prependtrue の場合、ディレクトリはスキャンリストの先頭に追加されます。

addServerImportsDir を使用して、Nitro がスキャンするディレクトリを追加できます。これは、カスタムサーバーディレクトリから Nitro に関数を自動インポートさせたい場合に便利です。

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

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

その後、サーバーコードで useApiSecret 関数を使用できます。

runtime/server/api/hello.ts
export default defineEventHandler(() => {
  const apiSecret = useApiSecret()
  // Do something with the apiSecret
})

addServerScanDir

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

~/server/api~/server/routes~/server/middleware、および ~/server/utils のみがスキャンされます。

使用方法

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

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

タイプ

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

パラメーター

プロパティタイプ必須説明
dirsstring | string[]trueNitro によってサーバーディレクトリとしてスキャンされるように登録するディレクトリ、またはディレクトリの配列。
opts{ prepend?: boolean }falseインポートディレクトリのオプション。prependtrue の場合、ディレクトリはスキャンリストの先頭に追加されます。

addServerScanDir を使用して、Nitro がスキャンするディレクトリを追加できます。これは、カスタムサーバーディレクトリを追加したい場合に便利です。

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

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

その後、サーバーコードで hello 関数を使用できます。

runtime/server/api/hello.ts
export default defineEventHandler(() => {
  return hello() // Hello from server utils!
})