Slik fikser du intern feil 500 i Next.js Server Components
Fiks Next.js Server Component 500-feil ved å spore serverlogger, sjekke datahenting og miljøvariabler, håndtere feil og verifisere produksjonsbygget.
Sist verifisert: 11. september 2026. Feilen «Module not found: Error: Can’t resolve 'fs'» betyr vanligvis at Webpack bygger kode for en nettleser, men at kildekoden din – eller en av dens avhengigheter – importerer Node.js’ filsystemmodul. Node dokumenterer node:fs som API-et for å samhandle med filsystemet, mens Webpacks gjeldende dokumentasjon sier at Webpack 5 ikke lenger automatisk polyfiller Node.js’ kjerne-moduler for nettleserbygger.
Det viktige er å velge løsningen som samsvarer med hva koden faktisk prøver å gjøre. Det finnes ingen enkeltinnstilling som er riktig for alle prosjekter. Hvis applikasjonen din virkelig trenger å lese filer fra serverens disk, flytt dette arbeidet til Node/serverkode. Hvis en avhengighet importerer fs kun for en valgfri Node-kun-funksjon som nettleserpakken din aldri bruker, kan resolve.fallback: { fs: false } være passende. Hvis pakken har en nettleserkompatibel bygging, bruk den i stedet. Og hvis pakken er ment å kjøre i Node, mål mot Node i stedet for å late som om det er en nettleserpakke.
| Situasjon | Beste første løsning | Hovedfordel | Hovedkompromiss |
|---|---|---|---|
Din egen nettleserkode importerer fs | Fjern den fra nettleserstien eller flytt operasjonen til en server/API | Samsvare med den faktiske kjøretidsmiljøet | Krever en arkitektonisk grense mellom klient og server |
En avhengighet importerer fs, men funksjonen brukes aldri i nettleseren | Vurder resolve.fallback: { fs: false } | Liten, enkel byggefix | Vil feile logisk hvis pakken senere utfører filsystemavhengig kode |
| En avhengighet tilbyr nettleser- og Node-bygg | Bruk eller oppgrader til den nettleserkompatible inngangen | Bevarer tiltenkt nettleseratferd | Kan kreve endringer i pakke/versjon |
| Utdatabygg kjører i Node, ikke i en nettleser | Bruk target: "node" | Holder Node-innbygde moduler tilgjengelige ved kjøretid | Utdatabygg er ikke lenger en nettleserpakke |
| Du prøver å «polyfille fs» i nettleseren | Vurder kravet på nytt | Unngår et villedende kompatibilitetslag | Du kan trenge en annen nettleserbasert lagrings/fil-arbeidsflyt |
Webpacks offisielle dokumentasjon for resolve.fallback angir at Webpack 5 ikke lenger polyfiller Node-kjerne-moduler automatisk. Dens utgivelsesnotater for Webpack 5 forklarer årsaken: automatiske polyfills kunne legge til store, unødvendige kompatibilitetskoder i frontend-pakker, så Webpack flyttet ansvaret til applikasjonen eller pakkeforfatteren.
fsStart med den første nyttige linjen i Webpacks feilutdata. Den peker vanligvis til filen hvor oppløsningen feilet, for eksempel:
ERROR in ./src/utils/fileHelper.js 1:0-20
Module not found: Error: Can't resolve 'fs'
fs-import. Det er ikke utdata fra et ekte prosjekt; filnavn og linjenumre er illustrative.Hvis den feilende filen er din, søk i den etter begge former:
const fs = require('fs')
// eller
import fs from 'node:fs'
// eller
import { readFile } from 'node:fs/promises'
Nodes offisielle dokumentasjon for filsystemet bekrefter at node:fs og node:fs/promises er Node-API-er for filsystemoperasjoner. En vanlig nettleserpakke får ikke tilgang til serverens disk bare fordi Webpack kan analysere importen.
Hvis den feilende filen er under node_modules, ikke rediger den pakken på stedet umiddelbart. Identifiser først hvilken toppnivåavhengighet som brakte den inn i nettleserpakken din. Det nyttige spørsmålet er ikke bare «Hvilken pakke importerer fs?», men «Hvorfor er den Node-orienterte kodebanen tilgjengelig fra klientinngangen min?»
Bruk denne diagnosen når: feilen oppstår etter oppgradering av Webpack, tillegging av en avhengighet, import av et tidligere server-kun-verktøy i frontend-kode, eller flytting av delt kode til en klientpakke.
Praktisk sjekk: fjern midlertidig importen som fører til den feilende modulen og bygg på nytt. Hvis fs-feilen forsvinner, har du bekreftet avhengighetsbanen før du endrer Webpack-konfigurasjonen.
Dette er den beste løsningen når koden trenger å lese konfigurasjonsfiler, maler, lokale dokumenter, private nøkler, genererte eiendeler, serverlogger eller noe annet fra maskinens filsystem.
For eksempel er dette passende i Node:
import { readFile } from 'node:fs/promises'
export async function loadTemplate() {
return readFile('./templates/email.html', 'utf8')
}
Men den bør ikke trekkes inn i en nettleserinngang. Eksponer i stedet resultatet gjennom applikasjonens serverlag. En forenklet oppdeling kan være:
// server-side kode
import { readFile } from 'node:fs/promises'
app.get('/api/template', async (req, res) => {
const text = await readFile('./templates/email.html', 'utf8')
res.type('text/plain').send(text)
})
// nettleser-side kode
export async function loadTemplate() {
const response = await fetch('/api/template')
if (!response.ok) throw new Error('Failed to load template')
return response.text()
}
Kompromisset er arkitektonisk: du legger til et server-endepunkt eller en annen serverside grense, men du bevarer semantikken til fs. Nettleseren ber om data; serveren leser filsystemet.
Denne løsningen er passende når: filsystemoperasjonen er reell og nødvendig.
Denne løsningen er ikke nødvendig når: importen kun finnes inne i en valgfri Node-kodebane som nettleseren aldri utfører. I det tilfellet kan en nettleserspesifikk pakkeinngang eller en ignorert fallback være renere.
resolve.fallback: { fs: false } kun når filsystematferd er valgfrittWebpacks offisielle migreringsguide fra Webpack 4 til 5 sier spesifikt at konfigurasjoner som bruker det gamle mønsteret node.fs: 'empty' bør gå over til:
module.exports = {
// ...
resolve: {
fallback: {
fs: false
}
}
}
Se den offisielle Webpack 5-migreringsguiden.
resolve.fallback: { fs: false }. Bruk dette kun når nettleseren ikke trenger avhengighetens filsystematferd.Å sette en fallback til false forteller Webpack å ikke inkludere en implementering for den uløste modulen. Dette kan være nøyaktig riktig for en pakke som inneholder en beskyttet Node-kun-gren, som kode som bruker fs kun under serverrendering eller CLI-utførelse.
Det kan også skjule byggefeilen mens du sitter igjen med en designfeil ved kjøretid. Vurder denne avhengigheten:
const fs = require('fs')
export function loadUserConfig(path) {
return fs.readFileSync(path, 'utf8')
}
Hvis nettleseren din faktisk kaller loadUserConfig(), erstatter fs med «ingenting» ikke et fungerende nettleserfilsystem. Bygget kan fortsette, men funksjonen kan fortsatt ikke utføre den tiltenkte Node-operasjonen.
Bruk fs: false når: du har verifisert at den filsystemspesifikke grenen ikke brukes i nettlesermålet.
Ikke bruk den når: nettleserfunksjonen din avhenger av readFileSync, kataloggjennomgang, serverstier eller annen reell Node-filsystematferd.
Webpacks gjeldende dokumentasjon for resolve.fallback gir eksempler på manuelle polyfills for flere Node-kjerne-moduler som path, buffer, stream og crypto. Merk at kompatibilitetslisten ikke gir en generell fs-erstatning som er ekvivalent med Node-filsystemet.
Denne forskjellen er viktig. JavaScript-verktøy kan ofte reproduseres i en nettleser. Vilkårlig tilgang til verts-/serverfilsystemet er en kjøretidskapabilitet, ikke bare en manglende hjelpefunksjon.
Hvis det du virkelig trenger er en nettleserarbeidsflyt, velg et nettlesernativt design for den spesifikke oppgaven – for eksempel, hent en eiendel fra en URL, la brukeren velge en fil, eller lagre applikasjonsdata ved hjelp av en passende nettleserlagringsmekanisme. Døm ikke suksess kun etter om Webpack slutter å vise feilen.
Hvis feilen kommer fra en tredjepartspakke, inspiser om den pakken offisielt støtter nettlesere. Webpacks gjeldende guide for pakke exports forklarer at pakker kan gi betingede eksporter for miljøer som browser og node. Webpacks utgivelsesveiledning anbefaler også at pakkeforfattere gir frontend-kompatible alternativer når Node-kun-implementeringer er uegnede for nettlesere.
For eksempel kan en pakke konseptuelt eksponere:
{
"exports": {
".": {
"browser": "./dist/browser.js",
"node": "./dist/node.js",
"default": "./dist/browser.js"
}
}
}
Hvis en oppgradert pakkeversjon gir en riktig nettleserinngang mens den eldre versjonen din ikke gjør det, kan oppgradering være tryggere enn å konfigurere fs: false. Tilsvarende kan erstatning av en Node-orientert pakke med en som er eksplisitt designet for nettleserbruk redusere kompatibilitetshacks og pakkekompleksitet.
Velg denne ruten når: avhengigheten er ment å fungere i nettlesere, men den installerte versjonen velger eller eksponerer en Node-kun-implementering.
Kompromiss: oppgradering eller erstatning av en pakke kan introdusere API-endringer, så kjør de vanlige applikasjonstestene dine i stedet for å behandle en vellykket kompilering som tilstrekkelig.
Ikke alltid produserer Webpack nettleserkode i det hele tatt. Du kan pakke en CLI, bakgrunnsarbeider, byggeverktøy, SSR-server eller Node-tjeneste. I det tilfellet er det bakvendt å prøve å undertrykke fs: kjøretidsmiljøet gir faktisk den.
Webpacks offisielle dokumentasjon for Targets sier at:
module.exports = {
target: 'node'
}
kompilerer for et Node.js-lignende miljø og lar innebygde moduler som fs og path bli levert av Node ved kjøretid.
Webpacks mer detaljerte referanse for target-konfigurasjon skiller også mellom web, node, Electron-mål, nettleserarbeidere og andre miljøer.
Bruk target: 'node' når: den resulterende JavaScript-koden vil utføre under Node.
Ikke bruk den for å «fikse» en vanlig nettleser-SPA: endring av målet gjør ikke at en nettleser plutselig gir Nodes filsystem-API-er. Det endrer hvilket miljø Webpack antar vil utføre pakken.
For serverpakker gir Webpack også Node-orientert externals-atferd. Dens offisielle dokumentasjon for Externals angir at externalsPresets.node kan behandle Node-innbygde moduler som fs, path og vm som eksterne og laste dem med Nodes kjøretids require().
En typisk Node-orientert konfigurasjon kan derfor se ut som:
module.exports = {
target: 'node',
externalsPresets: {
node: true
}
}
Dette er en avansert serverpakke-bekymring, ikke en nettleser-workaround.
Etter å ha gjort den arkitektoniske eller konfigurasjonsmessige endringen, bygg på nytt:
npm run build
En ren kompilering beviser bare at moduloppløsningen lyktes. Det beviser ikke at den berørte funksjonen oppfører seg korrekt. Test i henhold til løsningen du valgte:
fs: false, utøv avhengigheten i nettleseren og bekreft at den aldri går inn i den filsystemavhengige grenen.| Løsning | Nettlesersikker? | Bevarer reell Node-filsystemtilgang? | Når du bør foretrekke den |
|---|---|---|---|
Flytt fs-arbeid til server/API | Ja | Ja, på serveren | Applikasjonen din trenger virkelig serverfilsystemdata |
resolve.fallback.fs = false | Kun hvis fs-grenen ikke brukes | Nei | Valgfri Node-kun-avhengighetsbane |
| Nettleserspesifikk pakke/eksport | Ja, hvis pakkene støtter det | Nei; gir nettleserspesifikk atferd i stedet | En avhengighet er ment å støtte begge kjøretidsmiljøer |
target: 'node' | Nei | Ja | Pakken kjører faktisk i Node |
| Generisk «fs-polyfill» | Avhenger av biblioteket og semantikken | Ikke ekvivalent med vilkårlig Node-filsystemtilgang | Kun etter verifisering av den nøyaktige nettleseratferden du trenger |
En hyppig kilde til denne feilen er et verktøymodul som inneholder både rene funksjoner og Node-kun-hjelpere:
// shared-utils.js
import fs from 'node:fs'
export function formatDate(date) {
return new Intl.DateTimeFormat('en-US').format(date)
}
export function readConfig(path) {
return fs.readFileSync(path, 'utf8')
}
Selv om nettleseren din kun importerer formatDate, kan den toppnivå fs-importen tvinge Webpack til å løse fs. Et renere design er å splitte modulene:
// shared/formatDate.js
export function formatDate(date) {
return new Intl.DateTimeFormat('en-US').format(date)
}
// server/readConfig.js
import fs from 'node:fs'
export function readConfig(path) {
return fs.readFileSync(path, 'utf8')
}
Dette gjør kjøretidsgrensen synlig i modulgrafet i stedet for å stole på tree-shaking eller en fallback for å fjerne en inkompatibel import.
Dette er et av de klassiske Webpack 5-migreringssymptomene. Webpack 4 leverte automatisk kompatibilitetsshim for mange Node-kjerne-moduler. Webpack 5 sluttet med vilje å gjøre det. Hvis koden din «fungerte før oppgraderingen», spør om den virkelig trengte Node-funksjonen i nettleseren, eller om den gamle bundleren stille injiserte kompatibilitetskode.
Den offisielle Webpack-migreringsguiden anbefaler å lese veiledningen for ødeleggende endringer i byggefeilen og erstatte gammel node.*-kompatibilitetskonfigurasjon med den nyere resolver-tilnærmingen der det er passende.
Ikke anta at gjenskaping av hver eneste Webpack 4-polyfill er den beste migreringen. Webpacks egne utgivelsesnotater anbefaler frontend-kompatible moduler der det er mulig.
Før du lukker saken, verifiser disse punktene:
fs.fs-bruk er valgfri og aldri utført i nettleseren, vurder resolve.fallback: { fs: false }.fs; ikke stopp ved «kompilert vellykket».Den varige løsningen er å tilpasse koden til kjøretidsmiljøet. fs tilhører Nodes filsystemmiljø. Webpack 5 gjør denne grensen mer synlig ved å ikke lenger injisere Node-kjerne-polyfills automatisk. Når du først har bestemt om filsystemarbeidet hører hjemme på serveren, er valgfritt i nettleseren, eller er en del av en Node-rettet pakke, blir den riktige konfigurasjonen mye lettere å velge.
Fiks Next.js Server Component 500-feil ved å spore serverlogger, sjekke datahenting og miljøvariabler, håndtere feil og verifisere produksjonsbygget.
Diagnostiser og fiks Kubernetes CrashLoopBackOff i lokal Minikube ved å sjekke pod-tilstand, tidligere logger, avslutningsårsaker, prober, konfigurasjon, minsegrenser og klusterhelse.
Fiks Docker Desktop-motoren som stopper på Windows 11 ved å sjekke Docker-status, oppdatere og starte WSL 2 på nytt, verifisere virtualisering og bruke diagnostikk før nullstilling.
Løs Vite-feilen 'process is not defined' ved å erstatte Node-stil bruk av process.env, konfigurere VITE_-variabler riktig og sjekke avhengigheter.
Løs PyTorch CUDA out-of-memory-feil med en praktisk arbeidsflyt: mål GPU-minne, reduser arbeidssettet, bruk AMP og akkumulering, sjekkpoint-aktiveringer, og juster allokatoren kun ved behov.
Fiks manglende Access-Control-Allow-Origin CORS-feil i Express.js ved å diagnostisere opprinnelsen, konfigurere cors trygt, håndtere preflight og verifisere headers.
Fiks React-feilen “Cannot read properties of undefined (reading 'map')” ved å spore opp den udefinerte verdien, korrigere state og API-data, og legge til sikre gjengivelseskontroller.
Løs Webpack-feilen «Can’t resolve 'fs'» ved å velge riktig løsning: flytt Node-kun-kode til serveren, bruk en nettlesersikker avhengighet, sett fs:false kun hvis valgfritt, eller mål mot Node riktig.
Fiks manglende Supabase API-nøkler i Next.js, Vite, Node, utplasseringer og Edge Functions. Bruk gjeldende navn på publiserbare/secret-nøkler, korrekte env-filer og trygge verifiseringstrinn.
Løs feilen “flutter: command not found” på macOS ved å finne Flutter SDK, legge til bin-mappen i PATH, laste inn Zsh på nytt og verifisere oppsettet.