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'),
})
},
})
export default defineEventHandler(() => {
return {
body: `User-agent: *\nDisallow: /`,
}
})
/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: 次のプロパティを持つハンドラーオブジェクト
| プロパティ | タイプ | 必須 | 説明 |
|---|---|---|---|
handler | EventHandler | true | イベントハンドラー。 |
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 フックの後でのみ呼び出すことができます。使用方法
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 のランタイム動作を拡張するプラグインを追加します。
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'))
},
})
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('request', (event) => {
console.log('on request', event.path)
})
nitroApp.hooks.hook('beforeResponse', (event, { body }) => {
console.log('on response', event.path, { body })
})
nitroApp.hooks.hook('afterResponse', (event, { body }) => {
console.log('on after response', event.path, { body })
})
})
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
パラメーター
| プロパティ | タイプ | 必須 | 説明 |
|---|---|---|---|
routes | string | 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 | インポート元のモジュール指定子。 |
priority | number | false | インポートの優先度。複数のインポートが同じ名前を持つ場合、最も高い優先度のものが使用されます。 |
disabled | ブール値 | false | このインポートが無効になっている場合。 |
meta | Record<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
パラメーター
| プロパティ | タイプ | 必須 | 説明 |
|---|---|---|---|
dirs | string | string[] | true | Nitro によってスキャンされるように登録するディレクトリ、またはディレクトリの配列。 |
opts | { prepend?: boolean } | false | インポートディレクトリのオプション。prepend が true の場合、ディレクトリはスキャンリストの先頭に追加されます。 |
例
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'))
},
})
export function useApiSecret () {
const { apiSecret } = useRuntimeConfig()
return apiSecret
}
その後、サーバーコードで useApiSecret 関数を使用できます。
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
パラメーター
| プロパティ | タイプ | 必須 | 説明 |
|---|---|---|---|
dirs | string | string[] | true | Nitro によってサーバーディレクトリとしてスキャンされるように登録するディレクトリ、またはディレクトリの配列。 |
opts | { prepend?: boolean } | false | インポートディレクトリのオプション。prepend が true の場合、ディレクトリはスキャンリストの先頭に追加されます。 |
例
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'))
},
})
export function hello () {
return 'Hello from server utils!'
}
その後、サーバーコードで hello 関数を使用できます。
export default defineEventHandler(() => {
return hello() // Hello from server utils!
})