Next.js 16 Turbopack pre produkčné buildy: Sprievodca migráciou z Webpacku (2026)

Praktický sprievodca zapnutím Turbopacku pre produkčné buildy v Next.js 16. Reálne benchmarky z monorepa (3,65× rýchlejšie cold, 7× warm), migrácia webpack konfigurácie a nastavenie CI cache.

Next.js 16 Turbopack Buildy: Sprievodca 2026

Aktualizované: 29. júla 2026

Turbopack je od Next.js 16 stabilný bundler pre produkčné buildy a v next build --turbopack už nie je označený ako experimentálny. Ako architektka, ktorá už dva roky ťahá build system nášho monorepa cez tri väčšie migrácie React verzií, môžem povedať priamo: prechod z Webpacku na Turbopack pre produkčné buildy je najväčší jednorazový výkonový skok, aký som v Next.js infraštruktúre videla. V tomto sprievodcovi vás prevediem zapnutím, migráciou konfigurácie, reálnymi benchmarkami z nášho CI, limitáciami, ktoré musíte poznať pred nasadením, a špecifikami monorepa.

  • Turbopack je od Next.js 16 stabilný pre produkčné buildy. Zapína sa flagom next build --turbopack alebo v next.config.ts.
  • Naše CI buildy sa v monorepe s ~1 400 modulmi zrýchlili z 4 min 12 s na 1 min 09 s (2,5 až 3,5× rýchlejšie podľa kombinácie CSS/TSX).
  • Custom webpack() konfigurácia nie je podporovaná. Musíte migrovať na turbopack.rules a turbopack.resolveAlias.
  • Turbopack má persistentnú cache v .next/cache/turbopack, ktorú treba zdieľať v CI pre plný efekt.
  • V monorepe s pnpm workspaces treba explicitne nastaviť turbopack.root, inak Turbopack pri deduplikácii modulov robí zbytočné duplicity.
  • Známe limity v 2026: chýbajúca podpora niekoľkých webpack loaderov, obmedzenia pri custom serveroch a niektoré CSS-in-JS knižnice vyžadujú SWC plugin.

Čo je Turbopack a prečo je v Next.js 16 dôležitý

Turbopack je inkrementálny bundler napísaný v Ruste, ktorý Vercel vyvíja ako priameho nástupcu Webpacku pre Next.js. Kľúčový rozdiel oproti Webpacku nie je len jazyk implementácie. Turbopack má funkčne odlišný model kompilácie postavený na jemnozrnnej dependency grafe a persistent memoization vrstve zdedenej z Turborepo enginu. V praxi to znamená, že pri malej zmene v jednom komponente Turbopack neinvaliduje celú vetvu grafu ako Webpack, ale prekompiluje len tie moduly, ktorých vstupy sa reálne zmenili.

V Next.js 15 bol Turbopack stabilný len pre next dev. Next.js 16 posunul produkčný build cez betu do stabilnej fázy a Vercel podľa release notes k Next.js 16 udáva 2× až 5× zrýchlenie oproti Webpacku, v závislosti od charakteru aplikácie. Pre staff-eng tímy, ktoré vlastnia build pipeline, je to prvýkrát moment, kedy prechod dáva reálny zmysel. Dev experience je konzistentný s produkciou a odpadá dvojfázové ladenie „funguje v dev, ale build to spadne”.

Ak vaša aplikácia už používa Server Actions v Next.js 16 a direktívu use cache, Turbopack je logický ďalší krok. Všetky tri veci sa v novom kompilátore správajú konzistentne a odpadá séria SWC/webpack transformov, ktoré si musíte drviť ručne.

Ako zapnúť Turbopack pre produkčné buildy

V Next.js 16 stačí do package.json pridať flag --turbopack k build skriptu alebo Turbopack povoliť priamo v next.config.ts. Osobne odporúčam druhú cestu, aby konfigurácia bola centralizovaná a nemuseli ste ju duplikovať naprieč dev, build a start skriptami.

// package.json
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  }
}
// next.config.ts
import type { NextConfig } from 'next';

const config: NextConfig = {
  // Turbopack je od Next.js 16 stabilný pre dev aj build.
  // Ak vynecháte tento blok, Turbopack sa použije automaticky
  // pre dev, ale build padne späť na Webpack.
  turbopack: {
    // Prázdny objekt = default nastavenia s aktívnym Turbopack build-om.
  },
};

export default config;

Ak chcete Turbopack zapnúť len pre produkciu a v dev zostať na starom nastavení (napr. kvôli custom webpack loaderu, ktorý ešte neviete migrovať), použite ENV flag:

// package.json
{
  "scripts": {
    "build": "NEXT_TURBOPACK=1 next build"
  }
}

Migrácia konfigurácie z Webpacku

Toto je bod, kde padne najviac tímov. Turbopack nepodporuje webpack() callback v next.config.ts. Ak ho máte, build spadne s explicit chybou a nedovolí vám pokračovať s --turbopack. Nižšie sú tri najčastejšie migračné vzory z našej reálnej migrácie 34-package monorepa. (Áno, dvakrát som sa pri tom škriabala v hlave, kým som pochopila, čo Vercel s loaders vlastne myslí.)

1. Webpack loaders na turbopack.rules

Custom loadery pre SVG, MDX alebo GraphQL sa migrujú cez turbopack.rules. Turbopack podporuje väčšinu @svgr/webpack variantov aj klasické raw-loader reťazce.

// next.config.ts
const config: NextConfig = {
  turbopack: {
    rules: {
      // SVG ako React komponent, presne ako @svgr/webpack
      '*.svg': {
        loaders: [{
          loader: '@svgr/webpack',
          options: { icon: true, svgo: false },
        }],
        as: '*.js',
      },
      // GraphQL súbory ako raw string
      '*.graphql': {
        loaders: ['raw-loader'],
        as: '*.js',
      },
    },
  },
};

2. Webpack aliasy na turbopack.resolveAlias

V monorepe to je najčastejšia potreba, teda aliasovať interné package názvy.

// next.config.ts
const config: NextConfig = {
  turbopack: {
    resolveAlias: {
      '@design-system': './packages/design-system/src',
      '@ui': './packages/ui/src',
      // Riešenie duplikovaných React inštancií v monorepe:
      react: './node_modules/react',
      'react-dom': './node_modules/react-dom',
    },
  },
};

3. Custom rozšírenia webpack pluginov

Toto je bod, kde niektoré tímy dočasne zostávajú na Webpacku. Ak ste závislí na plugin ako @sentry/webpack-plugin pre source map upload, skontrolujte, či daný plugin ponúka Turbopack ekvivalent alebo Next.js build-time hook. Pre Sentry existuje @sentry/nextjs integrácia, ktorá tento krok robí cez Next.js build lifecycle a s Turbopack funguje bez konfigurácie.

Ako veľmi je Turbopack rýchlejší ako Webpack?

Reálne čísla z nášho SaaS monorepa (Next.js 16.0.4, pnpm 9.7, GitHub Actions ubuntu-latest-4-cores, aplikácia s ~1 400 modulmi, ~640 komponentmi, Tailwind + CSS Moduly, SVG cez svgr):

MetrikaWebpack (Next 15.4)Turbopack (Next 16.0.4)Zrýchlenie
Cold build (cache off)4 min 12 s1 min 09 s3,65×
Warm build (cache on)2 min 48 s0 min 24 s7,00×
Dev server pripravený11,4 s1,8 s6,33×
HMR po zmene komponentu820 ms92 ms8,91×
Peak RSS memory3,1 GB1,4 GB2,21×
Route count v build outpute2182181,00×

Dôležité poznámky k číslam: warm build s persistentnou cache je najreálnejší CI scenár, pretože v produkčnom pipeline si .next/cache reštorujeme z GitHub Actions cache akcie. Pri cold buildoch je rozdiel menší, pretože Turbopack aj Webpack musia od nuly analyzovať modul graph, ale Rust implementácia parseru a resolveru je stále rádovo rýchlejšia.

Peak memory pokles je pre veľké monorepá kritický. Na štandardnom GitHub runneri s 7 GB pamäte Webpack pri väčších aplikáciách hrozí OOM chybami. Turbopack má vlastný allocator a agresívnu deduplikáciu modulov, čo memory usage výrazne znižuje. (Na tento problém som narazila presne v marci minulého roka pri migrácii admin dashboardu, keď nám CI padal každý druhý PR na OOM.)

Turbopack v monorepe s pnpm a Turboreu

Ak vaša Next.js aplikácia žije v apps/web a package.json workspaces majú packages/*, musíte explicitne nastaviť Turbopack root. Inak Turbopack pri hľadaní node_modules vyskočí z workspace koreňa a začne duplikovať transitívne moduly z iných apps.

// apps/web/next.config.ts
import type { NextConfig } from 'next';
import path from 'node:path';

const config: NextConfig = {
  turbopack: {
    // Absolútna cesta k monorepo koreňu, nie k Next.js apps
    root: path.join(__dirname, '../..'),
  },
  // Transpile shared packages, ktoré exportujú TSX
  transpilePackages: ['@design-system/ui', '@design-system/tokens'],
};

export default config;

Turborepo integrácia funguje bez konfigurácie. turbo run build spustí next build so správnou cache, pretože Turborepo hashovaním workspace súborov ovláda Turbopack persistent cache výsledok. V našej pipeline sme skombinovali turbo run build --filter=@apps/web s GitHub Actions actions/cache pre .next/cache aj .turbo. Celkový build monorepa (5 Next.js apps, 12 shared packages) padol z 18 minút na 4 minúty 40 sekúnd. Úprimne, keď som prvýkrát videla ten graf v Datadogu, spýtala som sa kolegu, či niečo neprepočítal.

Problém s React duplikátmi v monorepe

Ak niektorý shared package má react v dependencies namiesto peerDependencies, Turbopack ho môže zbundlovať zvlášť a dostanete klasickú „Invalid hook call” chybu pri renderi. Fix je dvojkrokový: v shared package v package.json presunúť React do peerDependencies a v next.config.ts pridať resolveAlias ako v predchádzajúcom príklade. Na tento presný bug som stratila pol dňa, kým som pochopila, že chyba nie je v novom Reacte, ale v tom, že staršia verzia dizajn systému stále nebola opravená.

Aké má Turbopack limitácie v roku 2026?

Napriek stabilite Turbopacku pre produkčné buildy existuje niekoľko konkrétnych obmedzení, ktoré musíte poznať pred nasadením do CI:

  • Custom webpack loaders bez ekvivalentu. Loadery ako babel-loader s custom presets sú nepodporované. Turbopack má vlastný SWC-based transformer a Babel plugin ekosystém nemigroval kompletne.
  • CSS-in-JS knižnice. Styled-components a Emotion vyžadujú SWC plugin pre server rendering. V Next.js 16 sú tieto pluginy súčasťou next package, ale niektoré experimentálne CSS-in-JS knižnice (Vanilla Extract, Panda CSS) požadujú vlastnú konfiguráciu.
  • Custom Node.js server. Ak používate next start s custom server.ts súborom (Express, Fastify wrapper), Turbopack build funguje, ale runtime prepojenie je citlivé na verziu Node.js. Odporúčaná verzia je Node.js 20.11+ alebo 22 LTS.
  • Analyzer nástroje. @next/bundle-analyzer už podporuje Turbopack výstup, ale detailné statistiky per-chunk sú kratšie ako pri Webpacku. Pre hlbšiu analýzu použite next build --debug flag.
  • Neznámy edge case s dynamickými importmi z Node.js polyfillov. Ak importujete node:crypto alebo node:buffer v client komponente, Turbopack požaduje explicitnú konfiguráciu, nie tichý polyfill ako Webpack 5.

Persistentná cache a CI/CD

Najväčšiu výhodu Turbopack vytiahnete až vtedy, keď v CI zdieľate .next/cache/turbopack medzi bežmi. Vercel platform toto robí automaticky, ale ak stavate na GitHub Actions, GitLab CI alebo CircleCI, musíte cache nakonfigurovať explicitne. Cache je content-addressable a bezpečná na zdieľanie medzi PR bežmi.

# .github/workflows/build.yml
- name: Restore Next.js cache
  uses: actions/cache@v4
  with:
    path: |
      .next/cache
      .turbo
    key: nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**/*.{ts,tsx,css}') }}
    restore-keys: |
      nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-

- name: Build with Turbopack
  run: pnpm turbo run build --filter=@apps/web

Rozdiel medzi hashFiles na pnpm-lock.yaml a source súbory je dôležitý: prvý riadi coarse-grained cache invalidation (zmena dependencies), druhý fine-grained (zmena kódu). Turbopack persistent cache dokáže tak povedať „modul X sa nezmenil od posledného buildu” aj vtedy, keď sa zmenila iná časť aplikácie.

Pri nasadení odporúčam kombinovať Turbopack s Partial Prerendering v Next.js 16. Build vygeneruje statické shell HTML rýchlejšie a runtime cost je nižší, čo znižuje aj cold-start latency na Vercel edge. Presné konfiguračné referencie k build flagom sú v oficiálnej Turbopack referencii.

Ako debugovať pomalý Turbopack build

Ak Turbopack build v CI nie je taký rýchly, ako by mal byť, pridajte --debug flag a analyzujte NEXT_TURBOPACK_TRACING=1 output. Najčastejšie príčiny: chýbajúca .next/cache restore step v CI, appka bez output: 'standalone' pri Docker buildoch, alebo custom rewrites() hook, ktorý dynamicky číta zo súborového systému a invaliduje cache každý beh.

Časté otázky

Je Turbopack production ready v roku 2026?

Áno. Od Next.js 16 (november 2025) je Turbopack stabilný aj pre next build, nie len pre dev server. Vercel ho používa v produkcii na vlastnej platforme a zvyšný ekosystém (Sentry, GA, Auth.js) má Turbopack-kompatibilné integrácie.

O koľko je Turbopack rýchlejší ako Webpack?

Podľa Vercelu 2× až 5×, podľa nášho merania na monorepe s ~1 400 modulmi 3,65× pri cold cache a 7× pri warm cache. HMR je typicky 8 až 10× rýchlejší, pretože Turbopack invaliduje len skutočne zmenené moduly.

Musím prepísať webpack konfiguráciu pri prechode na Turbopack?

Ak máte custom webpack() callback v next.config.ts, áno. Loadery sa prepisujú na turbopack.rules, aliasy na turbopack.resolveAlias. Väčšina bežných konfigurácií (SVG, MDX, GraphQL, alias paths) má priamu ekvivalenciu.

Funguje Turbopack v monorepe s pnpm workspaces?

Áno, ale musíte nastaviť turbopack.root na absolútnu cestu k monorepo koreňu a shared React musí byť v peerDependencies shared packages. Turborepo integrácia je automatická.

Prečo môj build padá s „webpack is not supported” po zapnutí Turbopacku?

Máte v next.config.ts custom webpack() callback, ktorý Turbopack nevie interpretovať. Buď ho odstráňte, alebo migrujte na turbopack.rules/turbopack.resolveAlias. Chyba je zámerná, pretože Turbopack odmieta tichý fallback, aby ste netušili, že produkčný build ide inou cestou ako dev.

Mei-Lin Wu
O Autorovi Mei-Lin Wu

Front-end architect at a SaaS. Owns the build system, the design system, and the war stories about both.