Configuración personalizada de Webpack
Es bueno saberlo: los cambios en la configuración de webpack no están cubiertos por semver, así que procede bajo tu propio riesgo.
Antes de continuar con la personalización de la configuración de webpack en tu aplicación, asegúrate de que Next.js no admita ya tu caso de uso:
- Importaciones CSS
- Módulos CSS
- Importaciones Sass/SCSS
- Módulos Sass/SCSS
- Personalización de la configuración de Babel
Algunas funcionalidades solicitadas comúnmente están disponibles como plugins:
Para extender nuestro uso de webpack
, puedes definir una función que extienda su configuración dentro de next.config.js
, de la siguiente manera:
module.exports = {
webpack: (
config,
{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack }
) => {
// Importante: devuelve la configuración modificada
return config
},
}
La función
webpack
se ejecuta tres veces, dos veces para el servidor (runtime nodejs / edge) y una para el cliente. Esto te permite distinguir entre la configuración del cliente y del servidor usando la propiedadisServer
.
El segundo argumento de la función webpack
es un objeto con las siguientes propiedades:
buildId
:String
- El ID de compilación, utilizado como identificador único entre compilacionesdev
:Boolean
- Indica si la compilación se realizará en desarrolloisServer
:Boolean
- Estrue
para la compilación del lado del servidor yfalse
para la del clientenextRuntime
:String | undefined
- El runtime objetivo para la compilación del servidor; puede ser"edge"
o"nodejs"
, esundefined
para la compilación del clientedefaultLoaders
:Object
- Loaders predeterminados utilizados internamente por Next.js:babel
:Object
- Configuración predeterminada debabel-loader
Ejemplo de uso de defaultLoaders.babel
:
// Ejemplo de configuración para agregar un loader que depende de babel-loader
// Este código fue tomado del código fuente del plugin @next/mdx:
// https://github.com/vercel/next.js/tree/canary/packages/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
},
}
nextRuntime
Ten en cuenta que isServer
es true
cuando nextRuntime
es "edge"
o "nodejs"
. Actualmente, nextRuntime
"edge
" es solo para middleware y Componentes del Servidor en el runtime edge.