Capítulo 263 de 456
Permite estender a config interna do webpack do Next.js via uma função em next.config.js, para quando o suporte nativo (CSS imports/modules, Sass, plugins como @next/mdx) não cobre o caso de uso. Mudanças de webpack config não seguem semver, use por sua conta e risco.
webpack(config, options): função que recebe a config webpack e um objeto de options, deve retornar a config modificada. Executa três vezes: duas para o servidor (Node.js / edge runtime) e uma para o cliente.options.buildId: String, identificador único do build.options.dev: Boolean, indica se a compilação é de desenvolvimento.options.isServer: Boolean, true para compilação server-side, false para client-side.options.nextRuntime: String | undefined, "edge" ou "nodejs" para compilação server; undefined no client. isServer é true quando nextRuntime é "edge" ou "nodejs".options.defaultLoaders.babel: config default do babel-loader usada internamente pelo Next.js, útil para compor com outros loaders custom.module.exports = {
webpack: (
config,
{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack }
) => {
// Important: return the modified config
return config
},
}
// Exemplo baseado no @next/mdx
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.mdx/,
use: [
options.defaultLoaders.babel,
{
loader: '@mdx-js/loader',
options: pluginOptions.options,
},
],
})
return config
},
}
defaultLoaders.babel com um loader customizado (@mdx-js/loader) para adicionar suporte a um novo tipo de arquivo.@next/mdx, @next/bundle-analyzer) antes de mexer na config webpack.return config: a função precisa retornar a config modificada, senão a customização é perdida.isServer sozinho não distingue edge de node; use nextRuntime para isso.nextRuntime: "edge" atualmente é só para proxy e Server Components em edge runtime.