Nitro
Nitro 是一個開放原始碼的 TypeScript 框架,用於建構超快速的網路伺服器。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'))
}
})