Nitro
Nuxt Kit提供了一组工具,帮助你使用Nitro。这些函数允许你添加服务器处理程序、插件和预渲染路由。
Nitro是一个用于构建超快速Web服务器的开源TypeScript框架。Nuxt 3(可选地使用Nuxt Bridge)使用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: 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
路由方法匹配器。
示例
import { createResolver, defineNuxtModule, addDevServerHandler } from '@nuxt/kit'
export default defineNuxtModule({
setup() {
const resolver = createResolver(import.meta.url)
addDevServerHandler({
handler: resolver.resolve('./runtime/uptime.get'),
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, prerenderRoutes } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'nuxt-sitemap',
configKey: 'sitemap',
},
defaults: {
sitemapUrl: '/sitemap.xml',
prerender: true,
},
setup(options) {
if (options.prerender) {
prerenderRoutes(options.sitemapUrl)
}
}
})