Van Nuxt 3 naar Nuxt 4: wat verandert er?
Update: Nuxt 3 krijgt sinds 31 juli 2026 geen updates meer, ook geen beveiligingsupdates. Upgraden is nu dus niet meer iets voor later.
Kort gezegd
- 01 Je code in de map app/, de oude indeling werkt nog
- 02 Data ophalen: gedeelde keys, shallowRef en undefined
- 03 Test eerst met compatibilityVersion 4
- 04 Verhuis naar app/ als laatste
Een nieuwe hoofdversie klinkt als veel werk. Bij Nuxt 4 valt dat mee: de meeste verschillen zijn klein. Een paar raken wel bijna elke site. Dit zijn ze, en dit is de volgorde waarin ik upgrade.
De map app/
Je code staat nu standaard in de map app/: pages, components, composables, layouts, middleware, plugins en app.vue. De mappen server/, public/ en shared/ blijven in de root.
Je hoeft niet meteen te verhuizen. Heeft je project geen map app/, dan gebruikt Nuxt de oude indeling. Verhuis je wel, let dan op de alias ~. Die wijst daarna naar app/, dus een import als ~/server/utils werkt niet meer.
Data ophalen werkt anders
Hier zit de meeste kans op fouten. Vier dingen veranderen in useAsyncData en useFetch:
- Aanroepen met dezelfde key delen nu dezelfde
data,errorenstatus. Geef ze dan ook dezelfde opties, zoalstransformendeep. datais eenshallowRef. Vervang je het hele object, dan werkt alles zoals eerst. Pas je iets diep in de data aan, zoalsdata.value.items.push(), dan ververst je scherm niet meer. Wil je dat toch, zet dandeep: true.dataenerrorbeginnen alsundefined, niet meer alsnull. Een check alsdata.value === nullis daarna nooit meer waar.- Verdwijnt het laatste component dat de data gebruikt, dan ruimt Nuxt die data op. Komt het component terug, dan wordt de data opnieuw opgehaald.
Tags in je head
Unhead, dat de tags in je head maakt, is nu versie 2. Oude opties als hid, vmid en children zijn weg. Zoek ze op in je project voordat je upgradet.
In deze volgorde upgrade ik
- Zet Nuxt 3 en je modules op de laatste versie. Los eerst de waarschuwingen op die er nu al zijn.
- Zet alvast
future: { compatibilityVersion: 4 }in je config. Dat kan vanaf Nuxt 3.12. Je draait dan met het gedrag van Nuxt 4, maar kunt nog terug. - Test de pagina’s die data ophalen. Zoek in je code op
=== null, op.push(en op keys die je op meer plekken gebruikt. - Upgrade met
npx nuxt upgrade --dedupe. Wat overblijft, pakt de codemod op:npx codemod@latest nuxt/4/migration-recipe. - Verhuis als laatste naar
app/, in een aparte commit. Dan staan in die diff alleen verplaatste bestanden.
Zit je daarna op Nuxt 4.2 of hoger, dan werkt dezelfde truc voor de volgende versie. Met compatibilityVersion: 5 test je nu al wat Nuxt 5 verandert.
Loopt je Nuxt-project vast?
Met een Nuxt-review loop ik je project door op code, performance en onderhoud. Vaste prijs: € 1.250.