Nitro
Nuxt Kitは、Nitroを扱うためのユーティリティを提供します。これらの関数を使用して、サーバーハンドラー、プラグイン、プリレンダールートを追加できます。
Nitroは、超高速なウェブサーバーを構築するためのオープンソースのTypeScriptフレームワークです。NuxtはそのサーバーエンジンとしてNitroを使用しています。useNitro
を使用してNitroインスタンスにアクセスし、addServerHandler
でサーバーハンドラーを追加し、addDevServerHandler
で開発モードでのみ使用されるサーバーハンドラーを追加し、addServerPlugin
でNitroのランタイム動作を拡張するプラグインを追加し、addPrerenderRoutes
でNitroによってプリレンダーされるルートを追加できます。
addServerHandler
Nitroサーバーハンドラーを追加します。サーバーミドルウェアやカスタムルートを作成したい場合に使用します。
使用法
import { createResolver, defineNuxtModule, addServerHandler } 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 | string | true | イベントハンドラーへのパス。 |
route | string | false | パスプレフィックスまたはルート。空文字列が使用された場合、ミドルウェアとして使用されます。 |
middleware | boolean | false | これはミドルウェアハンドラーであることを指定します。ミドルウェアはすべてのルートで呼び出され、通常は次のハンドラーに渡すために何も返さないべきです。 |
lazy | boolean | false | ハンドラーをインポートするために遅延読み込みを使用します。これは、ハンドラーをオンデマンドでのみ読み込みたい場合に便利です。 |
method | string | false | ルーターメソッドマッチャー。ハンドラー名にメソッド名が含まれている場合、それがデフォルト値として使用されます。 |
例
基本的な使用法
addServerHandler
を使用して、モジュールからサーバーハンドラーを追加できます。
import { createResolver, defineNuxtModule, addServerHandler } 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 { createResolver, defineNuxtModule, addDevServerHandler } from '@nuxt/kit'
export default defineNuxtModule({
setup() {
addDevServerHandler({
handler: defineEventHandler(() => {
return {
body: `Response generated at ${new Date().toISOString()}`
}
}),
route: '/_handler'
})
}
})
型
// @errors: 2391
import type { NitroDevEventHandler } from 'nitropack'
// ---cut---
function addDevServerHandler (handler: NitroDevEventHandler): void
パラメータ
handler: 以下のプロパティを持つハンドラーオブジェクト:
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
handler | EventHandler | true | イベントハンドラー。 |
route | string | false | パスプレフィックスまたはルート。空文字列が使用された場合、ミドルウェアとして使用されます。 |
例
基本的な使用法
場合によっては、開発目的で特定のサーバーハンドラーを作成したいことがあります。例えば、Tailwindの設定ビューアーなどです。
import { joinURL } from 'ufo'
import { defineNuxtModule, addDevServerHandler } from '@nuxt/kit'
export default defineNuxtModule({
async setup(options, nuxt) {
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インスタンスを返します。
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()
// Nitroインスタンスで何かを行う
})
}
})
型
function useNitro (): Nitro
addServerPlugin
Nitroのランタイム動作を拡張するプラグインを追加します。
Nitroプラグインについての詳細はNitroドキュメントを参照してください。
使用法
import { createResolver, defineNuxtModule, addServerPlugin } from '@nuxt/kit'
export default defineNuxtModule({
setup() {
const { resolve } = createResolver(import.meta.url)
addServerPlugin(resolve('./runtime/plugin.ts'))
}
})
型
function addServerPlugin (plugin: string): void
パラメータ
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
plugin | string | true | プラグインへのパス。プラグインは、Nitroインスタンスを引数として受け取るデフォルト関数をエクスポートする必要があります。 |
例
import { createResolver, defineNuxtModule, addServerPlugin } from '@nuxt/kit'
export default defineNuxtModule({
setup() {
const { resolve } = createResolver(import.meta.url)
addServerPlugin(resolve('./runtime/plugin.ts'))
}
})
addPrerenderRoutes
Nitroにプリレンダーされるルートを追加します。
使用法
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)
}
}
})
型
function addPrerenderRoutes (routes: string | string[]): void
パラメータ
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
routes | string | string[] | true | プリレンダーするルートまたはルートの配列。 |
addServerImportsDir
Nitroによって自動インポートされるディレクトリを追加します。
使用法
import { defineNuxtModule, createResolver, addServerImportsDir } 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
パラメータ
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
dirs | string | string[] | true | Nitroによってスキャンされるディレクトリまたはディレクトリの配列。 |
opts | { prepend?: boolean } | false | インポートディレクトリのオプション。prepend がtrue の場合、ディレクトリはスキャンリストの先頭に追加されます。 |
例
addServerImportsDir
を使用して、Nitroによってスキャンされるディレクトリを追加できます。これは、カスタムサーバーディレクトリから関数を自動インポートしたい場合に便利です。
import { defineNuxtModule, createResolver, addServerImportsDir } 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
関数を使用できます:
const useApiSecret = (): string => ''
// ---cut---
export default defineEventHandler(() => {
const apiSecret = useApiSecret()
// apiSecretを使用して何かを行う
})
addServerScanDir
Nitroによってスキャンされるディレクトリを追加します。サブディレクトリをチェックし、~/server
フォルダと同様に登録されます。
~/server/api
、~/server/routes
、~/server/middleware
、~/server/utils
のみがスキャンされます。
使用法
import { defineNuxtModule, createResolver, addServerScanDir } 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
パラメータ
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
dirs | string | string[] | true | Nitroによってサーバーディレクトリとしてスキャンされるディレクトリまたはディレクトリの配列。 |
opts | { prepend?: boolean } | false | インポートディレクトリのオプション。prepend がtrue の場合、ディレクトリはスキャンリストの先頭に追加されます。 |
例
addServerScanDir
を使用して、Nitroによってスキャンされるディレクトリを追加できます。これは、カスタムサーバーディレクトリを追加したい場合に便利です。
import { defineNuxtModule, createResolver, addServerScanDir } 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
関数を使用できます。
function hello() {
return 'Hello from server utils!'
}
// ---cut---
export default defineEventHandler(() => {
return hello() // Hello from server utils!
})