Nitro

Исходники
Nuxt Kit предоставляет набор утилит, которые помогут вам работать с Nitro. Эти функции позволяют вам добавлять серверные обработчики, плагины и маршруты для предварительного рендеринга.

Nitro - это TypeScript фреймворк с открытым исходный кодом для создания сверхбыстрых веб-серверов. Nuxt (и, по желанию, Nuxt Bridge) использует Nitro в качестве своего серверного движка. Вы можете использовать useNitro для доступа к экземпляру Nitro, addServerHandler для добавления обработчика сервера, addDevServerHandler для добавления обработчика сервера, который будет использоваться только в режиме разработки, addServerPlugin для добавления плагина для расширения поведения Nitro во время выполнения и addPrerenderRoutes для добавления маршрутов для предварительного рендеринга Nitro.

addServerHandler

Adds a Nitro server handler. Use this if you want to create server middleware or a custom route.

Usage

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: A handler object with the following properties:

PropertyTypeRequiredDescription
handlerstringtruePath to event handler.
routestringfalsePath prefix or route. If an empty string used, will be used as a middleware.
middlewarebooleanfalseSpecifies this is a middleware handler. Middleware are called on every route and should normally return nothing to pass to the next handlers.
lazybooleanfalseUse lazy loading to import the handler. This is useful when you only want to load the handler on demand.
methodstringfalseRouter method matcher. If handler name contains method name, it will be used as a default value.

Примеры

Basic Usage

You can use addServerHandler to add a server handler from your module.

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

When you access /robots.txt, it will return the following response:

User-agent: *
Disallow: /

addDevServerHandler

Adds a Nitro server handler to be used only in development mode. This handler will be excluded from production build.

Usage

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

export default defineNuxtModule({
  setup() {
    addDevServerHandler({
      handler: defineEventHandler(() => {
        return {
          body: `Ответ, сгенерированный в ${new Date().toISOString()}`
        }
      }),
      route: '/_handler'
    })
  }
})

Type

// @errors: 2391
import type { NitroDevEventHandler } from 'nitropack'
// ---cut---
function addDevServerHandler (handler: NitroDevEventHandler): void

Parameters

handler: A handler object with the following properties:

PropertyTypeRequiredDescription
handlerEventHandlertrueEvent handler.
routestringfalsePath prefix or route. If an empty string used, will be used as a middleware.

Examples

Basic Usage

In some cases, you may want to create a server handler specifically for development purposes, such as a Tailwind config viewer.

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 не применяются.

Usage

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

Type

function useNitro (): Nitro

addServerPlugin

Добавление плагина для расширения runtime-поведения Nitro.

Вы можете прочитать больше о плагинах Nitro в Nitro документации.

Usage

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

Параметры

PropertyTypeRequiredDescription
pluginstringtruePath to the plugin. The plugin must export a default function that accepts the Nitro instance as an argument.

Примеры

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

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

addPrerenderRoutes

Add routes to be prerendered to Nitro.

Usage

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

Type

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

Parameters

PropertyTypeRequiredDescription
routesstring | string[]trueA route or an array of routes to prerender.

addServerImports

Add imports to the server. It makes your imports available in Nitro without the need to import them manually.

Usage

import { defineNuxtModule, createResolver, addServerImports } 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' })
    )
  }
})

Type

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

Parameters

imports: An object or an array of objects with the following properties:

PropertyTypeRequiredDescription
namestringtrueImport name to be detected.
fromstringtrueModule specifier to import from.
prioritynumberfalsePriority of the import; if multiple imports have the same name, the one with the highest priority will be used.
disabledbooleanfalseIf this import is disabled.
metaRecord<string, any>falseMetadata of the import.
typebooleanfalseIf this import is a pure type import.
typeFromstringfalseUse this as the from value when generating type declarations.
asstringfalseImport as this name.

addServerImportsDir

Добавьте директорию, которая будет сканироваться Nitro на предмет автоимпорта.

Usage

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

Type

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

Параметры

PropertyTypeRequiredDescription
dirsstring | string[]trueA directory or an array of directories to register to be scanned by Nitro.
opts{ prepend?: boolean }falseOptions for the import directory. If prepend is true, the directory is added to the beginning of the scan list.

Примеры

You can use addServerImportsDir to add a directory to be scanned by Nitro. This is useful when you want Nitro to auto-import functions from a custom server directory.

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

You can then use the useApiSecret function in your server code:

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

addServerScanDir

Добавьте директории, которые будут сканироваться Nitro. Nitro будет проверять подкаталоги, которые будут зарегистрированы так же, как и папка ~/server.

Only ~/server/api, ~/server/routes, ~/server/middleware, and ~/server/utils are scanned.

Usage

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

Параметры

PropertyTypeRequiredDescription
dirsstring | string[]trueA directory or an array of directories to register to be scanned for by Nitro as server dirs.
opts{ prepend?: boolean }falseOptions for the import directory. If prepend is true, the directory is added to the beginning of the scan list.

Примеры

You can use addServerScanDir to add a directory to be scanned by Nitro. This is useful when you want to add a custom server directory.

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

You can then use the hello function in your server code.

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