Monorepo med Turborepo forklart — komplett norsk guide
Turborepo gjør monorepo-arkitektur tilgjengelig for alle. Lær hva monorepo er, hvordan Turbo cacher builds, og hvordan du strukturerer et workspace fra grunnen.

Monorepo samler all kode i ett repository og gjør deling av kode og verktøy dramatisk enklere.
Komplett guide til monorepo med Turborepo: hva er monorepo vs polyrepo, turbo.json, build-caching, pipelines, workspace-struktur og Nx som alternativ.
Monorepo vs Polyrepo — hva er egentlig forskjellen?
Et polyrepo-oppsett er det de fleste starter med: ett GitHub-repository per applikasjon eller tjeneste. Webappen er i `repo/frontend`, API-et er i `repo/backend`, og det delte komponentbiblioteket er i `repo/ui-components`. Dette er enkelt å starte med, men skalerer dårlig. Vil du gjøre en endring i et delt TypeScript-interface som både frontend og backend bruker, må du koordinere pull requests på tvers av tre repositories.
Et monorepo er det stikk motsatte: all kode ligger i ett repository, organisert i "packages" (også kalt workspaces). Webappen, API-et og komponentbiblioteket er alle i samme repo, og kan referere til hverandre direkte uten å publisere npm-pakker. Google, Meta og Microsoft bruker monorepo-arkitektur for sine massive kodebaser. Turborepo gjør dette tilgjengelig og håndterbart for teamstørrelser fra 2 til 200 utviklere.
Workspace-struktur — slik ser et Turborepo-prosjekt ut
En typisk Turborepo-struktur har to toppnivå-mapper: `apps/` og `packages/`. Under `apps/` finner du de deployerbare applikasjonene — for eksempel `apps/web` (Next.js-webapp) og `apps/api` (Express/Fastify API). Under `packages/` finner du delt kode: `packages/ui` (React-komponentbibliotek), `packages/config-typescript` (delt tsconfig), `packages/config-eslint` (delt ESLint-konfigurasjon) og `packages/utils` (delte hjelpefunksjoner). Roten av monorepoet har en `package.json` som definerer workspaces og installerer Turborepo.
- apps/web — Next.js eller Vite-webapp
- apps/api — Node.js/Express/Fastify backend
- apps/docs — Dokumentasjonsside (f.eks. Docusaurus)
- packages/ui — Delt React-komponentbibliotek
- packages/utils — Delte TypeScript-hjelpefunksjoner
- packages/config-typescript — Delt tsconfig.json
- packages/config-eslint — Delt ESLint-konfigurasjon
turbo.json — hjertet i Turborepo
Filen `turbo.json` i roten av monorepoet definerer pipelinen — hvilke oppgaver som finnes, hvilken rekkefølge de kjøres i, og hvilke outputs som skal caches. En grunnleggende konfigurasjon definerer tasks: `build` med `dependsOn: ["^build"]` (betyr: kjør build i alle avhengigheter først), `lint` uten avhengigheter, og `dev` med `cache: false` (utvikling caches ikke).
Nøkkelpunktet: `dependsOn: ["^build"]`-syntaksen er kraftig. Prefixet `^` betyr "i alle pakker dette pakket avhenger av". Så om `apps/web` avhenger av `packages/ui`, sikrer `^build` at `packages/ui` alltid bygges før `apps/web`. Turbo analyserer dependency-grafen automatisk og paralleliserer alt som kan kjøres parallelt.
Caching — Turborepos killer-funksjon
Turborepo cacher output fra oppgaver basert på en hash av: all kildekode i pakken, alle avhengigheter (node_modules), miljøvariabler (konfigurerbart) og turbo.json-konfigurasjonen. Om ingen av disse har endret seg siden siste kjøring, gjenbruker Turbo den cachede outputen direkte — uten å kjøre oppgaven på nytt. Remote Caching via Vercel lar hele teamet dele cache: om én CI-instans har bygget en pakke, kan en annen utvikler eller CI-kjøring laste ned den cachede outputen istedenfor å bygge på nytt. I store monorepoer kan dette redusere byggetider fra 20 minutter til under 2 minutter.
Nx — det kraftigere, mer komplekse alternativet
Nx er det andre store monorepo-verktøyet. Der Turborepo er enkelt og fokusert på å gjøre eksisterende npm-workspaces raskt, er Nx et fullverdig orkestreringsverktøy med kodegenerering, konfigurerbare preset-arkitekturer og et grafisk dependency-visualiseringsverktøy. Nx Crystal og Nx Cloud tilbyr lignende remote caching som Turborepo.
Nx er et bedre valg om du vil ha scaffolding-verktøy (generere nye apps og biblioteker fra maler), sterk integrering med Angular, eller en sentralt administrert monorepo-arkitektur. Turborepo er bedre om du har et eksisterende prosjekt du vil konvertere til monorepo med minimal konfigurasjon, eller om du foretrekker et verktøy som "forsvinner" og lar deg bruke vanlige npm-scripts.
Kom i gang — sett opp Turborepo på 10 minutter
Raskeste vei til et fungerende Turborepo-oppsett: `npx create-turbo@latest`. Dette setter opp en komplett monorepo med Next.js-webapp, Vite-komponentbibliotek og delte konfigurasjoner. Alternativt, om du vil legge til Turbo i et eksisterende prosjekt: installer med `npm install -D turbo`, legg til `turbo.json`, og konfigurer workspaces i rot-`package.json` med `"workspaces": ["apps/*", "packages/*"]`.
For norske utviklingsteam som vurderer monorepo: start i det små. Ta to eksisterende repos som deler kode (for eksempel en frontend og et delt komponentbibliotek) og legg dem i et Turborepo-monorepo. Evaluer erfaringen over 4–6 uker. De aller fleste team som gjør dette eksperimentet rapporterer at de aldri vil tilbake til polyrepo for prosjekter med delt kode.
Ofte stilte spørsmål
Hva handler «Monorepo med Turborepo forklart — komplett norsk guide» om?
Komplett guide til monorepo med Turborepo: hva er monorepo vs polyrepo, turbo.json, build-caching, pipelines, workspace-struktur og Nx som alternativ.
Monorepo vs Polyrepo — hva er egentlig forskjellen?
Et polyrepo-oppsett er det de fleste starter med: ett GitHub-repository per applikasjon eller tjeneste. Webappen er i `repo/frontend`, API-et er i `repo/backend`, og det delte komponentbiblioteket er i `repo/ui-components`. Dette er enkelt å starte med, men skalerer dårlig. Vil du gjøre en endring i et delt TypeScript-interface som både frontend og backend bruker, må du koordinere pull requests på tvers av tre repositories.
Hva bør du vite om workspace-struktur — slik ser et Turborepo-prosjekt ut?
En typisk Turborepo-struktur har to toppnivå-mapper: `apps/` og `packages/`. Under `apps/` finner du de deployerbare applikasjonene — for eksempel `apps/web` (Next.js-webapp) og `apps/api` (Express/Fastify API). Under `packages/` finner du delt kode: `packages/ui` (React-komponentbibliotek), `packages/config-typescript` (delt tsconfig), `packages/config-eslint` (delt ESLint-konfigurasjon) og `packages/utils` (delte hjelpefunksjoner). Roten av monorepoet har en `package.json` som definerer workspaces og installerer Turborepo.
Hva bør du vite om turbo.json — hjertet i Turborepo?
Filen `turbo.json` i roten av monorepoet definerer pipelinen — hvilke oppgaver som finnes, hvilken rekkefølge de kjøres i, og hvilke outputs som skal caches. En grunnleggende konfigurasjon definerer tasks: `build` med `dependsOn: ["^build"]` (betyr: kjør build i alle avhengigheter først), `lint` uten avhengigheter, og `dev` med `cache: false` (utvikling caches ikke).
Hva bør du vite om caching — Turborepos killer-funksjon?
Turborepo cacher output fra oppgaver basert på en hash av: all kildekode i pakken, alle avhengigheter (node_modules), miljøvariabler (konfigurerbart) og turbo.json-konfigurasjonen. Om ingen av disse har endret seg siden siste kjøring, gjenbruker Turbo den cachede outputen direkte — uten å kjøre oppgaven på nytt. Remote Caching via Vercel lar hele teamet dele cache: om én CI-instans har bygget en pakke, kan en annen utvikler eller CI-kjøring laste ned den cachede outputen istedenfor å bygge på nytt. I store monorepoer kan dette redusere byggetider fra 20 minutter til under 2 minutter.
Hva bør du vite om nx — det kraftigere, mer komplekse alternativet?
Nx er det andre store monorepo-verktøyet. Der Turborepo er enkelt og fokusert på å gjøre eksisterende npm-workspaces raskt, er Nx et fullverdig orkestreringsverktøy med kodegenerering, konfigurerbare preset-arkitekturer og et grafisk dependency-visualiseringsverktøy. Nx Crystal og Nx Cloud tilbyr lignende remote caching som Turborepo.
Redaksjonell merknad: Dette innholdet er utarbeidet av Norsk Næring med hjelp av kunstig intelligens og kvalitetssikret av redaksjonen. Informasjonen er ment som generell veiledning og erstatter ikke profesjonell rådgivning. Feil eller unøyaktigheter? Kontakt oss på help@norsknæring.no.





