Capítulo 435 de 456

Creating an Adapter

Core Idea

An adapter is a module exporting an object implementing the NextAdapter interface (imported from the next package), with two lifecycle hooks: modifyConfig and onBuildComplete.

Key Concepts

  • NextAdapter.name: string identifying the adapter.
  • modifyConfig(config, ctx): optional, runs for any CLI command loading next.config.js; receives { phase, nextVersion, projectDir }; returns the (possibly async) modified config.
  • onBuildComplete(ctx): optional, runs after build completes; receives { routing, outputs, projectDir, repoRoot, distDir, config, nextVersion, buildId }.
  • AdapterOutputs: shape of outputs passed to onBuildCompletepages, middleware, appPages, pagesApi, appRoutes, prerenders, staticFiles arrays.
  • Route type: source?, sourceRegex, destination?, headers?, has?, missing?, status?, priority?.

Code Examples

/** @type {import('next').NextAdapter} */
const adapter = {
  name: 'my-custom-adapter',

  async modifyConfig(config, { phase }) {
    if (phase === 'phase-production-build') {
      return { ...config }
    }
    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)
    }
  },
}

module.exports = adapter
  • O que demonstra: estrutura mínima de um adapter funcional, com os dois hooks do ciclo de vida.

Key Takeaways

  1. modifyConfig roda em qualquer comando CLI que carrega o config (não só build), então cheque phase antes de aplicar mudanças específicas de build.
  2. onBuildComplete é onde o grosso do trabalho de deploy acontece: processar outputs por tipo, ler routing, etc.
  3. A interface é totalmente tipada via import type { NextAdapter } from 'next'.

Connects To

  • API Reference (ch436): detalha os parâmetros de modifyConfig/onBuildComplete com mais precisão.
  • Output Types (ch441): schema completo de cada item em outputs.*.
  • Routing Information (ch442): schema detalhado de routing.*.