Üdvözlünk a Next.js konfigurációjának mélyebb világában! Ha valaha is építettél webalkalmazást a Next.js keretrendszerrel, valószínűleg találkoztál már a next.config.js
fájllal. Ez a fájl nem csupán egy egyszerű beállítási pont; ez az a központi agy, ahol a Next.js alkalmazásod viselkedését, teljesítményét és integrációit szabályozhatod. A fejlesztők gyakran alábecsülik a benne rejlő potenciált, pedig a helyes konfiguráció kulcsfontosságú lehet az optimalizált, skálázható és biztonságos Next.js alkalmazások létrehozásához. Ebben a cikkben részletesen bemutatjuk a next.config.js
fájl legfontosabb beállításait, segítve téged abban, hogy a legtöbbet hozd ki Next.js projektjeidből.
A next.config.js
fájl egy Node.js modul, ami azt jelenti, hogy JavaScript kódot tartalmazhat, és dinamikusan generálhatja a konfigurációt, akár környezeti változók alapján is. Ez rendkívül rugalmassá teszi, de egyben odafigyelést is igényel. Lássuk tehát, melyek azok a kulcsfontosságú beállítások, amiket minden Next.js fejlesztőnek ismernie kell.
Alapvető és Általános Konfigurációk
reactStrictMode
: Fejlesztés Biztonságosan
A reactStrictMode
beállítás aktiválása erősen ajánlott minden új Next.js projektben. Ez egy fejlesztési segédprogram, amely segít azonosítani a lehetséges problémákat az alkalmazásban, például a nem biztonságos életciklus metódusok használatát, vagy a nem várt side-effekteket. Habár a produkciós buildben nincs hatása a teljesítményre, a fejlesztési fázisban rendkívül értékes eszköz lehet a robusztus és hibamentes kód írásához.
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
};
module.exports = nextConfig;
A Strict Mode duplán rendereli a komponenseket fejlesztési módban, ami segít észrevenni a váratlan mellékhatásokat. Ez hozzájárul a jobb kódminőséghez és a stabilabb alkalmazásokhoz.
swcMinify
: Villámgyors Minifikálás
A Next.js 12-es verziója óta az SWC (Speedy Web Compiler) a keretrendszer alapértelmezett fordítója és minifikálója. Az swcMinify
beállítás alapértelmezetten true
, és ez az egyik legfontosabb oka annak, hogy a Next.js buildelése és frissítése ilyen hihetetlenül gyors. Az SWC egy Rust nyelven írt fordító, amely jelentősen felgyorsítja a fejlesztési folyamatot és a produkciós buildek elkészítését.
/** @type {import('next').NextConfig} */
const nextConfig = {
swcMinify: true, // Alapértelmezett, de érdemes tudni róla
};
module.exports = nextConfig;
Ezt a beállítást általában nem szükséges módosítani, de fontos tudni a létéről, mivel ez az alapja a Next.js modern, nagy teljesítményű fordítási láncának.
Képek Optimalizálása: Az images
Objektum
A weboldalak teljesítményének egyik legnagyobb akadálya a nem optimalizált képek. A Next.js beépített next/image
komponense forradalmasította a képkezelést, de ehhez a next.config.js
fájlban meg kell adnunk a szükséges beállításokat. Az images
objektummal szabályozhatjuk, hogyan működik a Next.js képoptimalizálója, különösen külső forrásból származó képek esetén.
domains
és remotePatterns
: Külső Képek Kezelése
Ha az alkalmazásod külső forrásból (pl. CDN, CMS) tölt be képeket, azokat explicite engedélyezned kell. A régi módszer a domains
tömb volt, ahol egyszerűen felsoroltad a domain neveket:
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
domains: ['example.com', 'anothercdn.io'],
},
};
module.exports = nextConfig;
A Next.js 13-tól kezdve azonban a sokkal rugalmasabb és biztonságosabb remotePatterns
használata ajánlott. Ez lehetővé teszi, hogy glob mintákkal és protokollokkal pontosabban meghatározd az engedélyezett képforrásokat.
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: '**.example.com', // Engedélyezi az összes aldomaint
port: '',
pathname: '/my-images/**', // Engedélyezi a /my-images útvonalat
},
{
protocol: 'https',
hostname: 'images.unsplash.com',
},
],
},
};
module.exports = nextConfig;
A remotePatterns
használatával pontosan szabályozhatod, honnan érkezhetnek képek, ezzel növelve az alkalmazás biztonságát és elkerülve a váratlan képhibákat. Mindig vedd figyelembe, hogy minden külső képforrást engedélyezned kell!
deviceSizes
és imageSizes
: Reszponzív Képek
A Next.js képoptimalizálója automatikusan generál különböző méretű képeket (srcset), hogy a böngésző a felhasználó eszközének és a viewport méretének leginkább megfelelő képet tudja betölteni. A deviceSizes
és imageSizes
tömbökkel testre szabhatod ezeket a méreteket.
deviceSizes
: Azok a méretek, amelyeket a Next.js alapértelmezett képbetöltője figyelembe vesz a különböző eszközökön való megjelenítéshez (pl. telefon, tablet, desktop).imageSizes
: Ezek a méretek elsősorban anext/image
komponenssizes
attribútumával együtt használatosak, hogy finomhangolják a generált képméreteket.
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
deviceSizes: [320, 640, 768, 1024, 1280, 1600, 1920, 2048, 3840],
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
},
};
module.exports = nextConfig;
Ezeknek a beállításoknak a gondos megválasztása jelentősen javíthatja az alkalmazás Core Web Vitals értékeit, különösen a Largest Contentful Paint (LCP) metrikát.
formats
: Képformátumok
Az formats
opcióval megadhatod, hogy milyen modern képformátumokat szeretnél használni, például a webp
vagy az avif
. Ezek a formátumok jobb kompressziót kínálnak, miközben megtartják a képminőséget, így gyorsabb betöltést eredményeznek.
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
formats: ['image/webp', 'image/avif'],
},
};
module.exports = nextConfig;
Az AVIF és WebP használata erősen ajánlott, mivel jelentősen csökkenthetik a képek fájlméretét anélkül, hogy a felhasználói élmény romlana. A Next.js automatikusan kiválasztja a böngésző által támogatott legjobb formátumot.
Nemzetköziesítés (i18n): Az i18n
Objektum
A globális közönséget megcélzó alkalmazásokhoz elengedhetetlen a többnyelvű támogatás. A Next.js beépített i18n
routing támogatása jelentősen leegyszerűsíti a nemzetköziesítési folyamatot. A next.config.js
fájlban konfigurálhatod a támogatott nyelveket és az alapértelmezett locale-t.
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en-US', 'hu', 'de'], // Támogatott nyelvek
defaultLocale: 'en-US', // Alapértelmezett nyelv
localeDetection: false, // Kikapcsolja a böngésző nyelvérzékelését
},
};
module.exports = nextConfig;
locales
: Egy tömb, amely tartalmazza az alkalmazásod által támogatott összes locale azonosítót.defaultLocale
: Az alapértelmezett nyelv, amelyet akkor használ a Next.js, ha a felhasználó nyelvi preferenciája nem szerepel alocales
listában.localeDetection
: Hatrue
(alapértelmezett), a Next.js automatikusan megpróbálja detektálni a felhasználó preferred nyelvét a böngésző beállításai alapján. Néha érdemes ezt kikapcsolni, és saját logikát implementálni.
A megfelelő i18n
beállítások kritikusak a jó felhasználói élmény és a SEO szempontjából, mivel lehetővé teszik a nyelvi alapú URL-ek (pl. /hu/rolunk
, /de/ueber-uns
) generálását.
Útvonal Kezelés: rewrites
, redirects
és headers
A next.config.js
fájl lehetőséget biztosít az alkalmazásod útvonalainak finomhangolására, átirányítások kezelésére és egyedi HTTP fejlécek hozzáadására, amelyek mind a felhasználói élményt, mind a SEO-t, mind a biztonságot javítják.
rewrites
: URL Maszkolás és Belső Átirányítások
A rewrites
segítségével „maszkolhatod” az URL-eket, így a felhasználó számára más URL jelenik meg, mint amit az alkalmazás belsőleg használ. Ez például akkor hasznos, ha egy régi API végpontot szeretnél elérni anélkül, hogy a felhasználónak látnia kellene a teljes URL-t, vagy ha egy „szép” URL-t szeretnél megjeleníteni egy komplex belső útvonalhoz.
/** @type {import('next').NextConfig} */
const nextConfig = {
async rewrites() {
return [
{
source: '/blog/:path*',
destination: '/posts/:path*', // A felhasználó látja a /blog-ot, de valójában a /posts-t hívjuk meg
},
{
source: '/api/:path*',
destination: 'https://external-api.com/api/:path*', // Proxy külső API-hoz
},
];
},
};
module.exports = nextConfig;
Fontos megjegyezni, hogy a rewrites
nem változtatja meg a böngésző URL-jét, csak a belső útválasztást befolyásolja. Ezzel ellentétben a redirects
valóban átirányítja a böngészőt egy új URL-re.
redirects
: Állandó és Ideiglenes Átirányítások
A redirects
kulcsfontosságú a SEO szempontjából, amikor régi URL-eket új címekre irányítasz át, vagy ideiglenes átirányításokat állítasz be karbantartás idejére. Kétféle átirányítás létezik:
permanent: true
(308 Permanent Redirect): A keresőmotorok számára jelzi, hogy az oldal véglegesen átköltözött.permanent: false
(307 Temporary Redirect): Ideiglenes átirányításokra használatos.
/** @type {import('next').NextConfig} */
const nextConfig = {
async redirects() {
return [
{
source: '/old-page',
destination: '/new-page',
permanent: true,
},
{
source: '/admin',
destination: '/login',
permanent: false,
},
];
},
};
module.exports = nextConfig;
A redirects
helyes használata megakadályozza a törött linkeket és megőrzi a SEO rangsorolást, amikor változtatsz az URL struktúrán.
headers
: Egyedi HTTP Fejlécek Hozzáadása
A headers
opcióval egyedi HTTP fejléceket adhatsz hozzá a Next.js alkalmazásodhoz. Ez rendkívül hasznos lehet biztonsági beállítások (pl. Content Security Policy, HSTS), cache beállítások vagy cross-origin kérések (CORS) kezeléséhez.
/** @type {import('next').NextConfig} */
const nextConfig = {
async headers() {
return [
{
source: '/(.*)', // Minden útvonalra vonatkozik
headers: [
{
key: 'X-Frame-Options',
value: 'DENY', // Megakadályozza a clickjacking-et
},
{
key: 'Content-Security-Policy',
value: "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';",
},
],
},
];
},
};
module.exports = nextConfig;
A biztonsági fejlécek megfelelő beállítása elengedhetetlen a modern webes alkalmazások védelméhez a gyakori támadásokkal szemben. Emellett a cache-elési fejlécek optimalizálhatják a betöltési sebességet.
Környezeti Változók Kezelése: Az env
Objektum
Bár a Next.js támogatja a .env
fájlok használatát, a next.config.js
fájlban az env
objektum is használható környezeti változók definiálására. Ez akkor lehet hasznos, ha a buildelés során statikus, nyilvánosan elérhető változókat szeretnél beállítani, amelyeknek nem feltétlenül kell titkosnak lenniük.
/** @type {import('next').NextConfig} */
const nextConfig = {
env: {
CUSTOM_VAR: 'ez egy egyedi változó',
API_URL: process.env.NODE_ENV === 'production' ? 'https://api.example.com' : 'http://localhost:3001',
},
};
module.exports = nextConfig;
Ezeket a változókat az alkalmazáson belül a process.env.CUSTOM_VAR
módon érheted el. Fontos hangsúlyozni, hogy ide soha ne tegyél titkos információkat, mint API kulcsokat vagy adatbázis jelszavakat! Az env
objektumban definiált változók a kliens oldalon is elérhetővé válnak a JavaScript bundle-ben. A titkos változókat mindig a .env.local
vagy a .env.production
fájlokban tárold, és a szerver oldalon (pl. API routes) használd fel azokat.
Fejlett Konfiguráció: A webpack
Függvény
A Next.js alapértelmezett beállításai a legtöbb projekt számára elegendőek, de ha speciális igényeid vannak, a webpack
funkcióval közvetlenül hozzáférhetsz a belső Webpack konfigurációhoz, és módosíthatod azt. Ez hatalmas rugalmasságot biztosít, de nagy óvatosságot is igényel, mivel könnyen tönkreteheti az alkalmazás buildjét.
/** @type {import('next').NextConfig} */
const nextConfig = {
webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
// Példa: SVG fájlok betöltésének módosítása
config.module.rules.push({
test: /.svg$/,
use: ['@svgr/webpack'],
});
// Példa: Egyedi Webpack plugin hozzáadása
config.plugins.push(
new webpack.DefinePlugin({
__MY_CUSTOM_VAR__: JSON.stringify('Hello from Webpack!'),
})
);
return config;
},
};
module.exports = nextConfig;
A webpack
függvény paraméterként kapja meg a jelenlegi Webpack konfigurációt, valamint további segédobjektumokat (pl. isServer
, dev
), amelyekkel környezetfüggő módosításokat hajthatsz végre. Használd ezt a funkciót, ha például egyedi betöltőkre (loaders) van szükséged (pl. GraphQL fájlok, egyedi CSS előfeldolgozók), vagy speciális Webpack pluginokat szeretnél használni, amik nem részei az alapértelmezett Next.js konfigurációnak.
Egyéb Hasznos Beállítások
assetPrefix
: CDN Integráció
Ha egy Content Delivery Network (CDN) mögött üzemelteted a Next.js alkalmazásodat, az assetPrefix
beállítással megadhatod a CDN URL-jét. Ez biztosítja, hogy a statikus fájlok (képek, CSS, JS) a CDN-ről legyenek kiszolgálva, ezzel felgyorsítva a betöltési időt és csökkentve a fő szerver terhelését.
/** @type {import('next').NextConfig} */
const nextConfig = {
assetPrefix: process.env.NODE_ENV === 'production' ? 'https://mycdn.example.com' : undefined,
};
module.exports = nextConfig;
Gondoskodj arról, hogy a CDN-re feltöltött statikus fájlok elérési útvonala megegyezzen az alkalmazásban használt útvonalakkal.
distDir
: Egyedi Build Mappa
Alapértelmezetten a Next.js a .next
mappába építi be az alkalmazást. A distDir
beállítással ezt a mappát átnevezheted, ha például a CI/CD pipeline-od vagy a hosting szolgáltatód más mappanevet igényel.
/** @type {import('next').NextConfig} */
const nextConfig = {
distDir: 'build', // A .next helyett a build mappába épül be
};
module.exports = nextConfig;
generateBuildId
: Egyedi Build Azonosító
Ha speciális caching stratégiákat vagy deployment folyamatokat használsz, az generateBuildId
funkcióval egyedi azonosítót generálhatsz minden buildhez. Ez hasznos lehet, ha biztosítani szeretnéd, hogy a CDN cache-e invalidálódjon egy új deployment során.
/** @type {import('next').NextConfig} */
const nextConfig = {
generateBuildId: async () => {
// Egyedi azonosító generálása például a Git commit hash alapján
return 'my-custom-build-id';
},
};
module.exports = nextConfig;
Konklúzió
A next.config.js
fájl a Next.js keretrendszer szíve és lelke, amely hatalmas kontrollt biztosít az alkalmazásod működése felett. A bemutatott beállítások ismerete és helyes alkalmazása kulcsfontosságú az optimalizált teljesítményű, biztonságos és karbantartható Next.js alkalmazások építéséhez.
Fontos, hogy mindig alaposan dokumentáld a next.config.js
módosításait, és körültekintően járj el, különösen a Webpack konfiguráció vagy az experimental
beállítások módosításakor. A Next.js dokumentációja mindig a legjobb forrás a legfrissebb információkért és a részletesebb példákért. Használd ki a benne rejlő erőt, és emeld Next.js projektjeidet a következő szintre!
Leave a Reply