Nitro
Nitro 是一個開放原始碼的 TypeScript 框架,用於建置超快速的 Web 伺服器。Nuxt 使用 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: NitroDevEventHandler): void
export interface NitroDevEventHandler {
handler: EventHandler;
route?: string;
}
參數
handler
類型:NitroEventHandler
必要:true
具有以下屬性的處理常式物件
handler
(必要)
類型:string
事件處理常式。route
(選用)
類型:string
路徑前綴或路由。如果使用空字串,將會被當作中介軟體使用。
範例
import { createResolver, defineNuxtModule, addDevServerHandler } from '@nuxt/kit'
export default defineNuxtModule({
setup() {
const resolver = createResolver(import.meta.url)
addDevServerHandler({
handler: () => {
return {
body: `Response generated at ${new Date().toISOString()}`
}
},
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()
。類型
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 的執行階段行為。
類型
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, 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)
}
}
})
addServerImportsDir
新增一個目錄,供 Nitro 掃描以進行自動導入。
類型
function addServerImportsDir (dirs: string | string[], opts: { prepend?: boolean }): void
參數
dirs
類型:string | string[]
必要:true
要註冊以供 Nitro 掃描的目錄或目錄陣列
範例
import { defineNuxtModule, createResolver, addServerImportsDir } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup(options) {
const resolver = createResolver(import.meta.url)
addServerImportsDir(resolver.resolve('./runtime/server/utils'))
}
})
addServerScanDir
新增要由 Nitro 掃描的目錄。它將檢查子目錄,這些子目錄將像 ~/server
資料夾一樣註冊。
類型
function addServerScanDir (dirs: string | string[], opts: { prepend?: boolean }): void
參數
dirs
類型:string | string[]
必要:true
要註冊以供 Nitro 作為伺服器目錄掃描的目錄或目錄陣列。
範例
import { defineNuxtModule, createResolver, addServerScanDir } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup(options) {
const resolver = createResolver(import.meta.url)
addServerScanDir(resolver.resolve('./runtime/server'))
}
})