Настройка конфигурации Webpack

Важно: изменения в конфигурации webpack не покрываются semver, поэтому действуйте на свой страх и риск

Прежде чем добавлять пользовательскую конфигурацию webpack в ваше приложение, убедитесь, что Next.js ещё не поддерживает ваш вариант использования:

Некоторые часто запрашиваемые функции доступны в виде плагинов:

Чтобы расширить использование webpack, вы можете определить функцию, которая изменяет его конфигурацию в файле next.config.js:

next.config.js
module.exports = {
  webpack: (
    config,
    { buildId, dev, isServer, defaultLoaders, nextRuntime, webpack }
  ) => {
    // Важно: возвращайте изменённую конфигурацию
    return config
  },
}

Функция webpack выполняется дважды — один раз для сервера и один раз для клиента. Это позволяет различать конфигурации клиента и сервера с помощью свойства isServer.

Второй аргумент функции webpack — это объект со следующими свойствами:

  • buildId: String — ID сборки, используемый как уникальный идентификатор между сборками
  • dev: Boolean — Указывает, выполняется ли сборка в режиме разработки
  • isServer: Booleantrue для серверной сборки и false для клиентской
  • nextRuntime: String | undefined — Целевая среда выполнения для серверной сборки: либо "edge", либо "nodejs", для клиентской сборки значение undefined
  • defaultLoaders: Object — Стандартные загрузчики, используемые внутри Next.js:
    • babel: Object — Стандартная конфигурация babel-loader

Пример использования defaultLoaders.babel:

// Пример конфигурации для добавления загрузчика, зависящего от babel-loader
// Этот исходный код взят из исходного кода плагина @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

Обратите внимание, что isServer имеет значение true, когда nextRuntime равен "edge" или "nodejs". В настоящее время "edge" используется только для middleware и серверных компонентов в среде выполнения edge.

On this page