next.config.js¶
Файл next.config.js
или next.config.mjs
предназначен для кастомной продвинутой настройки Next.js.
Пример next.config.js
:
1 2 3 4 5 6 7 8 |
|
Пример next.config.mjs
:
1 2 3 4 5 6 7 8 |
|
Можно использовать функцию:
1 2 3 4 5 6 7 8 9 |
|
phase
— это текущий контекст, для которого загружаются настройки. Доступными фазами являются:
PHASE_EXPORT
PHASE_PRODUCTION_BUILD
PHASE_PRODUCTION_SERVER
PHASE_DEVELOPMENT_SERVER
Фазы импортируются из next/constants
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Переменные среды окружения¶
Пример:
1 2 3 4 5 |
|
Использование:
1 2 3 4 5 6 7 |
|
Результат:
1 2 3 |
|
Заголовки¶
Настройка headers
позволяет устанавливать кастомные HTTP-заголовки для входящих запросов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
headers
— асинхронная функция, возвращающая массив объектов со свойствами source
и headers
:
source
— адрес входящего запросаheaders
— массив объектов со свойствамиkey
иvalue
Дополнительные параметры:
basePath: false | undefined
— еслиfalse
,basePath
не будет учитываться при совпадении, может использоваться только для внешних перезаписейlocale: false | undefined
— определяет, должна ли при совпадении включаться локальhas
— массив объектов со свойствамиtype
,key
иvalue
Если в настройках определены два кастомных заголовка с одинаковыми ключами, будет учитываться только значение последнего заголовка.
Поиск совпадения путей. Разрешен поиск совпадения путей. Например, путь /blog/:slug
будет совпадать с /blog/hello-world
(без вложенных путей):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Поиск всех совпадений путей. Для поиска всех совпадений можно использовать *
после параметра, например, /blog/:slug*
будет совпадать с /blog/a/b/c/d/hello-world
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Поиск совпадений путей с помощью регулярных выражений. Для поиска совпадений с помощью регулярок используются круглые скобки после параметра, например, /blog/:slug(\\d{1,})
будет совпадать с /blog/123
, но не с /blog/abc
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Символы ( ) { } : * + ?
считаются частью регулярного выражения, поэтому при использовании в source
в качестве обычных символов они должны быть экранированы с помощью \\
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Поиск совпадения на основе заголовка, куки и строки запроса. Для этого используется поле has
. Заголовок будет установлен только при совпадении полей source
и has
.
Значением has
является массив объектов со следующими свойствами:
type: string
—header | cookie | host | query
key: string
— ключ для поиска совпаденияvalue: string | undefined
— значение для проверки. Еслиundefined
, любое значение будет совпадать. Для захвата определенной части значения может использоваться регулярное выражение. Например, если дляhello-world
используется значениеhello-(?<param>.*)
,world
можно использовать в качестве значенияdestination
как:param
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
|
basePath
и i18n
. При наличии basePath
, его значение автоматически добавляется к значению source
, если не определено basePath: false
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
При наличии i18n
к значению source
автоматически добавляются значения locales
, если не определено locale: false
— в этом случае значение source
должно включать префикс локали:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
Дополнительная настройка Webpack¶
Перед кастомизацией Вебпака убедитесь, что Next.js не имеет поддержки необходимого функционала.
Пример определения функции для настройки webpack:
1 2 3 4 5 6 7 8 9 |
|
Данная функция выполняется дважды: один раз для сервера и еще один для клиента. Это позволяет разделять настройки с помощью свойства isServer
.
Вторым аргументом, передаваемым функции является объект со следующими свойствами:
buildId: string
— уникальный идентификатор сборкиdev: boolean
— индикатор компиляции в режиме разработкиisServer: boolean
— еслиtrue
, значит, выполняется компиляция для сервераdefaultLocales: object
— дефолтные лоадеры:babel: object
— дефолтные настройкиbabel-loader
Пример использования defaultLoaders.babel
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Настройка distDir
позволяет определять директорию для сборки:
1 2 3 |
|
Настройка generateBuildId
позволяет определять идентификатор сборки:
1 2 3 4 5 6 |
|
Пример отключения проверки кода с помощью eslint
при сборке проекта:
1 2 3 4 5 |
|
Пример отключения typescript при сборке проекта:
1 2 3 4 5 |
|