Files

46 lines
2.0 KiB
TypeScript
Raw Permalink Normal View History

2026-10-21 05:08:05 +02:00
import { withPayload } from '@payloadcms/next/withPayload'
import type { NextConfig } from 'next'
import createNextIntlPlugin from 'next-intl/plugin'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const dirname = path.dirname(fileURLToPath(import.meta.url))
const withNextIntl = createNextIntlPlugin('./src/i18n/request.ts')
const nextConfig: NextConfig = {
// dev открывается через nginx на доменах dev.*, без этого Next не отдаёт им ресурсы dev-сервера
allowedDevOrigins: (process.env.DEV_ALLOWED_ORIGINS ?? '').split(',').filter(Boolean),
poweredByHeader: false,
// proxy получает адрес запроса таким, каким его видит роутер Next. Иначе адрес строится
// от localhost, а роутер слушает 127.0.0.1, и любое переписывание считается внешним
skipProxyUrlNormalize: true,
turbopack: {
root: dirname,
},
webpack: (webpackConfig) => {
webpackConfig.resolve.extensionAlias = {
'.cjs': ['.cts', '.cjs'],
'.js': ['.ts', '.tsx', '.js', '.jsx'],
'.mjs': ['.mts', '.mjs'],
}
return webpackConfig
},
}
2026-10-22 04:53:15 +02:00
const config = withPayload(withNextIntl(nextConfig), { devBundleServerPackages: false })
/**
* withPayload вешает на все адреса Client Hints темы админки: Accept-CH, Vary и Critical-CH.
* На сайте Critical-CH заставляет Chrome повторять первый запрос страницы (лишний круг по сети
* при первом заходе), а Vary дробит кэш. Оставляем их только админке.
*/
const payloadHeaders = config.headers
config.headers = async () =>
((await payloadHeaders?.()) ?? []).map((rule) =>
rule.headers.some((header) => header.key === 'Critical-CH')
? { ...rule, source: '/admin/:path*' }
: rule,
)
export default config