Capítulo 272 de 456
An adapter is a module exporting an object that implements the NextAdapter interface (imported from next), with two lifecycle hooks: modifyConfig and onBuildComplete.
NextAdapter: TypeScript interface with name: string, optional modifyConfig, optional onBuildComplete.modifyConfig(config, ctx): called for any CLI command loading next.config.js; receives { phase, nextVersion, projectDir } and returns the (possibly modified) config, sync or async.onBuildComplete(ctx): called after build completes; receives routing (routing phases), outputs (AdapterOutputs), projectDir, repoRoot, distDir, config, nextVersion, buildId.AdapterOutputs: { pages, middleware?, appPages, pagesApi, appRoutes, prerenders, staticFiles } — arrays of typed build output entries.Route: routing rule shape (source?, sourceRegex, destination?, headers?, has?, missing?, status?, priority?).import type { NextAdapter } from 'next'
/** @type {import('next').NextAdapter} */
const adapter = {
name: 'my-custom-adapter',
async modifyConfig(config, { phase }) {
if (phase === 'phase-production-build') {
return { ...config /* Add your modifications */ }
}
return config
},
async onBuildComplete({ routing, outputs, buildId }) {
console.log('Build completed with', outputs.pages.length, 'pages')
console.log('Build ID:', buildId)
console.log('Dynamic routes:', routing.dynamicRoutes.length)
for (const page of outputs.pages) {
console.log('Page:', page.pathname, 'at', page.filePath)
}
for (const apiRoute of outputs.pagesApi) {
console.log('API Route:', apiRoute.pathname, 'at', apiRoute.filePath)
}
},
}
module.exports = adapter
| Hook | When | Key params |
|---|---|---|
modifyConfig | Any CLI command that loads config | config, phase, nextVersion, projectDir |
onBuildComplete | After build finishes | routing, outputs, projectDir, repoRoot, distDir, config, nextVersion, buildId |
{ name, modifyConfig?, onBuildComplete? } — no base class or framework boilerplate.modifyConfig runs on every config load (dev, build, etc.), gated by phase when the adapter should only act during production builds.onBuildComplete is the single hook exposing the full output graph (outputs.*) and routing table for platform-specific processing.outputs.* array entry.routing object.