CF Pages Build schlägt fehl? 8 häufige Probleme und Lösungen sparen Ihnen Stunden Debug-Zeit
Cloudflare Pages Build-Log, rot „Failed”. Heute Abend der fünfte Fehlschlag, morgen früh die Kundendemo. 500 Zeilen Build-Log, npm ERR! überall – und Sie wissen nicht, wo Sie anfangen sollen. Lösungen aus dem Netz: manche wirkungslos, manche verschlimmern es.
Die meisten CF Pages Build-Fehler fallen in drei Kategorien: Umgebungsunterschiede, Abhängigkeitskonfiguration, Versionskompatibilität. Wer diese Muster kennt, löst 90 % der Probleme in 10 Minuten. Dieser Artikel erklärt die Cloudflare Pages Build-Umgebung, fasst 8 typische Fehlerszenarien zusammen (jeweils mit echten Fehlermeldungen und vollständigen Lösungsschritten) und gibt präventive Konfigurationstipps. Danach haben Sie einen klaren Troubleshooting-Ablauf.
Teil 1: Die Cloudflare Pages Build-Umgebung verstehen
Besonderheiten der Pages Build-Umgebung
Bevor Sie konkrete Probleme angehen, sollten Sie verstehen: Die Cloudflare Pages Build-Umgebung unterscheidet sich grundlegend von Ihrer lokalen Entwicklungsumgebung. Oft liegt der Fehler nicht am Code, sondern an der Umgebung.
Standard-Konfiguration:
- Betriebssystem: Ubuntu (Build System V2 nutzt Ubuntu 22)
- Node-Version: 18.17.1 (ja, relativ alt)
- Paketmanager: standardmäßig
npm clean-install, nichtnpm install - Build-Timeout: 20 Minuten (harte Grenze)
- Worker-Größe: 10 MB Limit
Warum ist die Node-Version so alt? Cloudflare setzt auf Stabilität. Viele neue Pakete verlangen jedoch Node >= 18.18.0 oder >= 20.0.0 – Versionskonflikte sind vorprogrammiert.
Drei zentrale Unterschiede zur lokalen Umgebung:
-
Dateisystem unterscheidet Groß-/Kleinschreibung: Unter Windows oder Mac läuft
import Header from './header'auch mit DateinameHeader.js. Unter Linux muss die Schreibweise exakt stimmen. Einer der am leichtesten übersehenen Stolpersteine. -
Netzwerkumgebung: Lokal nutzen Sie vielleicht einen npm-Mirror (z. B. Taobao). Pages baut direkt gegen die offizielle npm-Quelle – manchmal mit Timeouts.
-
Unterschied beim Standard-Build-Befehl: Cloudflare führt vor Ihrem build command automatisch
npm clean-install --progress=falseaus. Strenger alsnpm install– bei Abweichung zwischen package-lock.json und package.json schlägt der Build fehl.
Schnelle Fehlerdiagnose
Wenn Pages beim Deploy fehlschlägt – wie finden Sie die eigentliche Ursache?
Schritt 1: Build-Log lesen
Build-Logs haben oft Hunderte Zeilen – entscheidend sind nur wenige Stellen:
# Letztes ERR! oder ERROR finden
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
# Oder Vite/Webpack-Fehler
[vite]: Rollup failed to resolve import
# Oder Git-Fehler
fatal: unable to access repository
Meine Erfahrung: Nach „ERR!” suchen (mit Ausrufezeichen) und 3–5 Zeilen nach oben lesen – dort liegt meist die Ursache. Lassen Sie sich nicht von der langen Installations-Ausgabe ablenken.
Schritt 2: Deployment ID speichern
Bei jedem fehlgeschlagenen Build erzeugt Cloudflare eine eindeutige Deployment ID – sichtbar in der Browser-Adressleiste:
https://dash.cloudflare.com/xxx/pages/view/your-project/a398d794-7322-4c97-96d9-40b5140a8d9b
↑ Das ist die Deployment ID
Diese ID ist wichtig. Bei Support-Anfragen oder Community-Posts kann damit direkt auf Ihren Build verwiesen werden.
Schritt 3: Lokal reproduzieren
Ein Schritt, den viele überspringen. Versuchen Sie, das Problem in einer Linux-Umgebung nachzustellen:
# Methode 1: Docker mit Ubuntu 22
docker run -it ubuntu:22.04 bash
# Methode 2: Strikt npm ci (wie Pages)
npm ci
# Methode 3: Node-Version mit nvm setzen
nvm use 18.17.1
Schlägt npm ci lokal fehl, liegt das Problem bei der Abhängigkeitskonfiguration. Scheitert es mit Node 18.17.1, ist es ein Versionskompatibilitätsproblem.
Teil 2: 8 typische Build-Fehlerszenarien und Lösungen
Problem 1: Abhängigkeitsinstallation fehlgeschlagen (npm install Fehler)
Typische Fehlermeldungen:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! Fix the upstream dependency conflict, or retry this command
npm ERR! with --force or --legacy-peer-deps
Oder
npm ERR! code ERR_SOCKET_TIMEOUT
npm ERR! network Socket timeout
Das häufigste Szenario. Lokal funktioniert npm install, auf Pages kommt ERESOLVE. Grund: Cloudflare nutzt standardmäßig npm ci – sehr strikt.
Ursachen:
npm clean-installlöst peer dependency Konflikte nicht automatisch- package-lock.json und package.json nicht synchron
- Netzwerk-Timeout (offizielle npm-Quelle nicht erreichbar)
Lösungen (nach Empfehlung):
Lösung 1: Standard-Installation überspringen, eigenen Befehl setzen
# Umgebungsvariable in Pages-Einstellungen
SKIP_DEPENDENCY_INSTALL=true
# Build command ändern zu
npm install --legacy-peer-deps && npm run build
Die direkteste Lösung – Sie übernehmen die Abhängigkeitsinstallation selbst.
Lösung 2: package-lock.json reparieren
# Lock-Datei lokal neu erzeugen
rm package-lock.json
npm install
git add package-lock.json
git commit -m "fix: regenerate package-lock.json"
git push
Manchmal ist die Lock-Datei einfach korrupt – Neu erzeugen reicht.
Lösung 3: Build über GitHub Actions
Wenn die ersten beiden nicht helfen, ist das Problem komplexer. GitHub Actions + cloudflare/pages-action geben Ihnen volle Kontrolle über die Build-Umgebung.
# .github/workflows/deploy.yml
- name: Install dependencies
run: npm install --force
- name: Build
run: npm run build
- name: Deploy to Cloudflare Pages
uses: cloudflare/pages-action@v1
Prävention: Regelmäßig lokal npm ci testen, damit die Lock-Datei synchron bleibt.
Problem 2: Node-Versions-Inkompatibilität
Typische Fehlermeldungen:
ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment
This package requires Node.js version ^18.18.0 or >=20.0.0
Oder
The engine "node" is incompatible with this module.
Expected version ">=18.18.0". Got "18.17.1"
Solche Fehler bedeuten meist: Node-Version zu alt. Viele neue Pakete (TypeScript ESLint, Next.js 14+) verlangen Node >= 18.18.0, Pages-Standard ist 18.17.1.
Lösungen (eine reicht):
Lösung 1: Umgebungsvariable setzen (am empfohlensten)
In Cloudflare Pages unter Settings > Environment variables:
Variable: NODE_VERSION
Wert: 20.11.0
Offiziell empfohlene Methode – einfach und direkt.
Lösung 2: .node-version Datei hinzufügen
Im Projektroot .node-version anlegen:
echo "20.11.0" > .node-version
git add .node-version
git commit -m "chore: specify Node version for Cloudflare Pages"
Lösung 3: .nvmrc Datei verwenden
Gleiches Prinzip, anderer Dateiname:
echo "20.11.0" > .nvmrc
Best Practice: Umgebungsvariable und .node-version kombinieren – lokal und online konsistent. Kein bleeding-edge, sondern LTS (z. B. 20.11.0).
Problem 3: Build-Timeout (über 20 Minuten)
Typisches Symptom:
Build-Log läuft exakt 20 Minuten, bricht dann ohne klare Fehlermeldung ab – nur:
Build exceeded maximum time of 20 minutes
Besonders frustrierend – keine Details. Meist große Projekte oder zu viele Abhängigkeiten.
Ursachen:
- Zu viele Abhängigkeiten –
npm installallein dauert 15 Minuten - Build-Skript mit vielen redundanten Operationen
- Build-Cache nicht genutzt
Lösungen:
Lösung 1: Build-Cache leeren
Manchmal wird der Cache zur Last. In Pages:
Settings > Builds & deployments > Clear build cache
Danach neu bauen – hat bei mir mehrfach geholfen.
Lösung 2: Abhängigkeiten analysieren und optimieren
Bundle Analyzer für große Pakete:
# Next.js Projekt
npm install --save-dev @next/bundle-analyzer
# In next.config.js aktivieren
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
module.exports = withBundleAnalyzer({
// Ihre Konfiguration
})
Einmal ANALYZE=true npm run build ausführen und große Pakete identifizieren. Ich habe einmal die gesamte moment.js eingebunden – Wechsel zu day.js sparte 3 Minuten Build-Zeit.
Lösung 3: Teile der Pipeline in CI verlagern
typecheck, lint in GitHub Actions – Pages nur für den Build:
// package.json
{
"scripts": {
"build": "next build", // Nur Build, keine Checks
"build:full": "npm run typecheck && npm run lint && npm run build" // Vollständiger Ablauf für CI
}
}
Lösung 4: pnpm nutzen
pnpm installiert Abhängigkeiten deutlich schneller. In Pages:
Build command: pnpm install && pnpm run build
Problem 4: Modulauflösungsfehler (Module not found)
Typische Fehlermeldungen:
Module not found: Error: Can't resolve './App' in '/opt/buildhome/repo/src'
Did you mean 'App.js'?
Oder
[vite]: Rollup failed to resolve import '/src/components/Snackbar'
from '/opt/buildhome/repo/src/pages/Login.jsx'
Sehr tückisch. Lokal läuft alles, auf Pages fehlt das Modul. In 99 % der Fälle: Groß-/Kleinschreibung.
Ursache:
Linux unterscheidet strikt zwischen Groß- und Kleinschreibung, Windows und macOS standardmäßig nicht. import App from './app' mit Datei App.js – Windows ok, Linux Fehler.
Lösungen:
Lösung 1: Alle Import-Pfade korrigieren
Die grundlegendste Lösung. Jeden Import prüfen, Groß-/Kleinschreibung exakt an Dateinamen anpassen:
// ❌ Falsch
import Header from './header'; // Dateiname ist Header.jsx
// ✅ Richtig
import Header from './Header';
Manuell prüfen ist mühsam. ESLint-Regel empfohlen:
// .eslintrc.js
module.exports = {
rules: {
'import/no-unresolved': 'error', // Nicht auflösbare Imports erkennen
}
}
Lösung 2: Pfad-Aliase nutzen
Absolute Pfade oder Aliase vermeiden viele Probleme:
// vite.config.js
export default {
resolve: {
alias: {
'@': '/src',
'@components': '/src/components'
}
}
}
// Import mit Alias
import Header from '@components/Header'; // Klar und eindeutig
Lösung 3: Community-Workaround
Ein Nutzer berichtete von einem merkwürdigen, aber wirksamen Trick: Ordner umbenennen, committen, wieder zurückbenennen – und es funktionierte. Vermutlich Cache-bezogen. Wenn nichts anderes hilft, können Sie es versuchen.
Problem 5: Umgebungsvariablen falsch konfiguriert
Typisches Symptom:
console.log(process.env.API_KEY); // undefined
Oder Build-Fehler wegen fehlender Umgebungsvariable.
Ursache:
Build-Zeit- und Laufzeit-Variablen werden oft verwechselt. Außerdem hat jedes Framework eigene Namenskonventionen.
Wichtig zu verstehen:
Cloudflare Pages unterscheidet zwei Typen:
- Build-Zeit-Variablen: bei
npm run buildverfügbar, werden in den Code kompiliert - Laufzeit-Variablen: nur in Functions (Edge Functions)
Bei rein statischen Sites (HTML/JS) sind Laufzeit-Variablen nicht verfügbar – nur Build-Zeit-Variablen.
Lösungen:
Lösung 1: Variablentyp korrekt konfigurieren
Beim Anlegen in Pages beachten:
- „Production” und „Preview” für die jeweilige Umgebung wählen
- Option „Build” muss aktiviert sein, wenn die Variable beim Build benötigt wird
Lösung 2: Framework-Namenskonventionen beachten
Unterschiedliche Anforderungen je Framework:
# Vite: Präfix VITE_
VITE_API_KEY=xxx
# Next.js öffentliche Variablen: NEXT_PUBLIC_
NEXT_PUBLIC_API_KEY=xxx
# Nuxt: runtimeConfig in nuxt.config.js
Lösung 3: Sensible Daten als Secret
In Pages gibt es zwei Variablentypen:
- Text: Wert sichtbar
- Secret: Wert verschlüsselt, nicht sichtbar
API Keys und Passwörter unbedingt als Secret speichern.
Best Practice:
- Lokal
.env.localnutzen (in.gitignoreeintragen) - Online Cloudflare Pages Umgebungsvariablen
- Unterschiedliche Werte für Preview (Test-API) und Production (Live-API)
Problem 6: Git-Integrationsprobleme
Typische Symptome:
- Keine Autorisierung für das Repository
- Fehler: „This repository is already in use by another Pages project”
- Push löst keinen automatischen Build aus
Ursache:
Meist GitHub/GitLab-Autorisierung oder Cloudflare-Limits (ein Repository nicht in mehreren Accounts).
Lösungen:
Lösung 1: GitHub App neu autorisieren
In GitHub:
Settings > Applications > Cloudflare Pages > Configure > Uninstall
Deinstallieren, dann in Cloudflare Dashboard Repository erneut verbinden – löst Neu-Autorisierung aus.
Lösung 2: Repository-Nutzung prüfen
Bei „already in use”: Prüfen, ob dasselbe Repo in mehreren Cloudflare-Accounts genutzt wird. Nicht erlaubt – Pages-Projekt in anderen Accounts löschen.
Lösung 3: GitHub-Berechtigungen prüfen
Mindestens Maintainer-Rechte im Repository nötig. Contributor reicht nicht.
Lösung 4: Sonderzeichen vermeiden
Commit Messages ohne Emojis oder Sonderzeichen – kann Build-Trigger verhindern. GitHub erlaubt es, Cloudflare parst es manchmal nicht korrekt.
Bekannte Einschränkung: PRs von Fork-Repositories lösen keine Preview-Deployments aus. Cloudflare plant Unterstützung, aktuell noch nicht verfügbar.
Problem 7: Functions-Deployment fehlgeschlagen
Typische Symptome:
Build erfolgreich, Deployment-Phase schlägt fehl – wenig aussagekräftige Logs. Oder:
Build failed: Functions bundle size exceeding limit
Ursachen:
- Worker-Bundle über 10 MB Limit
- Functions Bindings (KV, D1, R2) falsch konfiguriert
- Node.js-spezifische APIs in Edge-Umgebung
Lösungen:
Lösung 1: Functions-Bundle-Größe analysieren
Bundle Analyzer – was macht das Bundle so groß?
npm install --save-dev @next/bundle-analyzer
Oft fehlendes Tree Shaking – ganze Bibliothek eingebunden.
Lösung 2: Astro/SvelteKit Adapter optimieren
Bei Astro oder SvelteKit Cloudflare Adapter korrekt konfigurieren:
// astro.config.mjs
import cloudflare from '@astrojs/cloudflare';
export default {
output: 'hybrid', // oder 'server'
adapter: cloudflare({
mode: 'directory', // Wichtig: unnötige Daten vorgerenderter Seiten entfernen
}),
};
Astro packt standardmäßig auch vorgerenderte Seiten in Functions – das bläht das Bundle auf. mode: 'directory' behebt das.
Lösung 3: Bindings prüfen
In Pages:
Settings > Functions > Bindings
KV, D1, R2 aus dem Code müssen konfiguriert sein.
Lösung 4: Keine Node.js-spezifischen APIs
Cloudflare Workers = V8, kein vollständiges Node.js. Diese APIs sind nicht verfügbar:
fs(Dateisystem)path(teilweise)child_processnet/http(stattdessenfetch)
Logik ggf. in die Build-Phase verlagern.
Problem 8: Cache und Custom Domain
Typische Symptome:
- Deploy erfolgreich, Website zeigt noch alten Inhalt
- Custom Domain 404,
.pages.devfunktioniert - Startseite zeigt 404 Not Found
Ursachen:
- Page Rules stören Pages-Cache
- DNS der Custom Domain falsch konfiguriert
- Keine
index.htmlim Build-Output
Lösungen:
Lösung 1: Cache Everything Page Rule entfernen
Bei Proxied Custom Domain (orange Wolke) beeinflussen Zone-Einstellungen Pages. Prüfen:
Rules > Page Rules
„Cache Everything”-Regel gefunden? Löschen. Pages hat eigenes Caching – Page Rule nicht nötig.
Lösung 2: Custom Domain auf DNS Only setzen
Wenn das nicht hilft: DNS-Eintrag auf graue Wolke (DNS Only):
DNS > Records > Eintrag wählen > DNS Only
Kein Cloudflare-Proxy mehr – direkte Verbindung zu Pages.
Lösung 3: index.html sicherstellen
404 auf Root (yourdomain.com/)? Build-Output auf index.html prüfen. Viele Frameworks liefern dist/index.html – „Build output directory” in Pages muss stimmen.
Lösung 4: Cache manuell leeren
Wenn neuer Inhalt nicht erscheint:
Caching > Configuration > Purge Everything
Achtung: Leert den gesamten Zone-Cache – mit Bedacht nutzen.
Teil 3: Präventive Best Practices
Build-Konfiguration
Lieber von Anfang an richtig konfigurieren als später reparieren:
1. Node-Version explizit angeben
Nicht auf Standard verlassen:
# .node-version Datei
20.11.0
# Gleichzeitig in Cloudflare Pages Umgebungsvariablen
NODE_VERSION=20.11.0
2. Unterschiedliche Build-Befehle pro Branch
Mit CF_PAGES_BRANCH Umgebungsvariable:
// package.json
{
"scripts": {
"build": "node scripts/build.js",
"build:production": "next build",
"build:preview": "next build && next export"
}
}
// scripts/build.js
const branch = process.env.CF_PAGES_BRANCH || 'main';
const command = branch === 'main' ? 'build:production' : 'build:preview';
// Entsprechenden Befehl ausführen
3. Bei Monorepos das richtige Root-Verzeichnis setzen
Bei pnpm workspace oder Turborepo in Pages das Root directory angeben:
Root directory: apps/web
Build command: pnpm run build
Kontinuierliches Monitoring und Debugging
1. Lokale Debug-Umgebung aufbauen
Docker simuliert Pages-Umgebung:
# Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nodejs npm
RUN node -v # Sollte ca. 18.17.1 sein
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
2. Cloudflare Status im Blick behalten
Manchmal liegt der Fehler bei Cloudflare selbst. Bei unerklärlichen Fehlern zuerst prüfen:
https://www.cloudflarestatus.com/
Pages-Störung? Abwarten statt blind debuggen.
3. Wann Cloudflare Support kontaktieren
Wenn Sie:
- alle Lösungen ausprobiert haben
- einen Plattform-Bug vermuten
- höhere Build-Limits brauchen (Paid-Pläne können anfragen)
Dann Support kontaktieren – mit Deployment ID und detailliertem Fehlerlog.
Fazit
CF Pages Build-Fehler lassen sich auf wenige Kategorien reduzieren. In 90 % der Fälle: Umgebungsunterschiede (Node-Version, Dateisystem-Groß-/Kleinschreibung), Abhängigkeitskonfiguration (package-lock.json, peer dependencies) oder Missverständnisse über Pages (Umgebungsvariablen, Cache).
Systematisches Vorgehen:
- Build-Log lesen, echte Fehlermeldung finden
- Problemkategorie bestimmen (Abhängigkeit, Version, Pfad, Konfiguration)
- Lokal reproduzieren
- Passende Lösung anwenden
- Präventiv konfigurieren, um Wiederholungen zu vermeiden
Bewahren Sie diesen Artikel als Troubleshooting-Handbuch auf. Beim nächsten Build-Fehler: diesem Ablauf folgen – in den meisten Fällen ist das Problem in 10 Minuten gelöst. Wenn das grüne „✓ Deployed” erscheint, ist die Erleichterung unschätzbar.
Weitere Cloudflare Pages Probleme? Teilen Sie sie gerne in den Kommentaren – vielleicht hilft es anderen.
Vollständiger Troubleshooting-Ablauf für fehlgeschlagene Cloudflare Pages Builds
Systematische Methode von der Build-Umgebung bis zu 8 typischen Problemen – 90 % lösbar in 10 Minuten
Estimated time: PT10M
-
1
Step 1: Besonderheiten der Cloudflare Pages Build-Umgebung verstehen
Standard-Konfiguration: -
2
Step 2: Schnelle Fehlerdiagnose: Build-Log lesen und Deployment ID speichern
Build-Log lesen: -
3
Step 3: Lokal reproduzieren und Abhängigkeitsfehler beheben
Lokal reproduzieren: -
4
Step 4: Node-Versions-Inkompatibilität und Build-Timeout lösen
Node-Versions-Inkompatibilität: -
5
Step 5: Modulauflösungsfehler und Umgebungsvariablen beheben
Modulauflösungsfehler: -
6
Step 6: Git-Integration und Functions-Deployment beheben
Git-Integration:
FAQ
Was ist die Standard-Konfiguration der Cloudflare Pages Build-Umgebung? Worin unterscheidet sie sich von der lokalen Umgebung?
• Betriebssystem: Ubuntu 22 (Build System V2)
• Node-Version: 18.17.1 (relativ alt, möglicherweise inkompatibel mit neueren Paketen)
• Paketmanager: standardmäßig npm clean-install, nicht npm install
• Build-Timeout: 20 Minuten (harte Grenze)
• Worker-Größe: 10 MB Limit
Drei zentrale Unterschiede zur lokalen Umgebung:
1) Dateisystem unterscheidet Groß-/Kleinschreibung:
• Linux ist strikt, Windows/Mac standardmäßig nicht
• import Header from './header' schlägt auf Linux fehl, auch wenn die Datei Header.js heißt
• Einer der am leichtesten übersehenen Stolpersteine
2) Netzwerkumgebung:
• Lokal nutzen Sie vielleicht einen npm-Mirror (z. B. Taobao)
• Pages baut direkt gegen die offizielle npm-Quelle – manchmal mit Timeouts
3) Unterschied beim Standard-Build-Befehl:
• Cloudflare führt vor Ihrem build command automatisch npm clean-install --progress=false aus
• Strenger als npm install – bei Abweichung zwischen package-lock.json und package.json schlägt der Build fehl
Warum ist die Node-Version so alt? Cloudflare setzt auf Stabilität. Viele neue Pakete verlangen jedoch Node >= 18.18.0 oder >= 20.0.0 – das führt zu Versionskonflikten.
Wie finde ich schnell die Ursache eines fehlgeschlagenen Cloudflare Pages Builds?
Build-Logs haben oft Hunderte Zeilen – entscheidend sind nur wenige Stellen:
• Letztes ERR! oder ERROR finden (npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve)
• Oder Vite/Webpack-Fehler ([vite]: Rollup failed to resolve import)
• Oder Git-Fehler (fatal: unable to access repository)
Meine Erfahrung: Nach „ERR!“ suchen (mit Ausrufezeichen) und 3–5 Zeilen nach oben lesen – dort liegt meist die Ursache. Lassen Sie sich nicht von der langen Installations-Ausgabe ablenken.
Schritt 2: Deployment ID speichern
Bei jedem fehlgeschlagenen Build erzeugt Cloudflare eine eindeutige Deployment ID – sichtbar in der Browser-Adressleiste:
https://dash.cloudflare.com/xxx/pages/view/your-project/a398d794-7322-4c97-96d9-40b5140a8d9b
Diese ID ist wichtig: Bei Support-Anfragen oder Community-Posts kann damit direkt auf Ihren Build verwiesen werden.
Schritt 3: Lokal reproduzieren
Versuchen Sie, das Problem in einer Linux-Umgebung nachzustellen:
• Docker mit Ubuntu 22: docker run -it ubuntu:22.04 bash
• Strikt npm ci verwenden (wie Pages)
• Node-Version mit nvm setzen: nvm use 18.17.1
Schlägt npm ci lokal fehl, liegt das Problem bei der Abhängigkeitskonfiguration.
Scheitert es mit Node 18.17.1, ist es ein Versionskompatibilitätsproblem.
Wie behebe ich fehlgeschlagene Abhängigkeitsinstallation (npm install Fehler)?
• npm ERR! code ERESOLVE
• npm ERR! ERESOLVE could not resolve
• npm ERR! Fix the upstream dependency conflict, or retry this command with --force or --legacy-peer-deps
• Oder npm ERR! code ERR_SOCKET_TIMEOUT, npm ERR! network Socket timeout
Das häufigste Szenario: lokal funktioniert npm install, auf Pages kommt ERESOLVE. Grund: Cloudflare nutzt standardmäßig npm ci – sehr strikt.
Ursachen:
• npm clean-install löst peer dependency Konflikte nicht automatisch
• package-lock.json und package.json nicht synchron
• Netzwerk-Timeout (offizielle npm-Quelle nicht erreichbar)
Lösungen (nach Empfehlung):
Lösung 1: Standard-Installation überspringen, eigenen Befehl setzen
• Umgebungsvariable SKIP_DEPENDENCY_INSTALL=true in Pages-Einstellungen
• Build command ändern zu: npm install --legacy-peer-deps && npm run build
• Direkteste Lösung – Sie übernehmen die Abhängigkeitsinstallation selbst
Lösung 2: package-lock.json reparieren
• Lock-Datei lokal neu erzeugen:
rm package-lock.json
npm install
git add package-lock.json
git commit -m "fix: regenerate package-lock.json"
git push
• Manchmal ist die Lock-Datei einfach korrupt
Lösung 3: Build über GitHub Actions
• Wenn die ersten beiden nicht helfen, ist das Problem komplexer
• GitHub Actions + cloudflare/pages-action für vollständige Kontrolle über die Build-Umgebung
Prävention: Regelmäßig lokal npm ci testen, damit die Lock-Datei synchron bleibt.
Wie löse ich Node-Versions-Inkompatibilität? Was tun bei Build-Timeout?
Typische Fehlermeldungen:
• ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment
• This package requires Node.js version ^18.18.0 or >=20.0.0
• Oder The engine "node" is incompatible with this module. Expected version ">=18.18.0". Got "18.17.1"
Solche Fehler bedeuten meist: Node-Version zu alt. Viele neue Pakete (TypeScript ESLint, Next.js 14+) verlangen Node >= 18.18.0, Pages-Standard ist 18.17.1.
Lösungen:
Lösung 1: Umgebungsvariable setzen (empfohlen)
• In Cloudflare Pages: Settings > Environment variables
• Variable: NODE_VERSION
• Wert: 20.11.0
• Offiziell empfohlene Methode
Lösung 2: .node-version Datei hinzufügen
• Im Projektroot: echo "20.11.0" > .node-version
Lösung 3: .nvmrc Datei verwenden
• Gleiches Prinzip, anderer Dateiname: echo "20.11.0" > .nvmrc
Best Practice:
Umgebungsvariable und .node-version kombinieren – lokal und online konsistent. Kein bleeding-edge, sondern LTS (z. B. 20.11.0).
Build-Timeout:
Typisches Symptom:
Build-Log läuft exakt 20 Minuten, bricht dann ohne klare Fehlermeldung ab – nur: Build exceeded maximum time of 20 minutes.
Lösungen:
Lösung 1: Build-Cache leeren
• Pages: Settings > Builds & deployments > Clear build cache
• Danach neu bauen – hat bei mir mehrfach geholfen
Lösung 2: Abhängigkeiten analysieren und optimieren
• Bundle Analyzer für große Pakete
• Ich habe einmal die gesamte moment.js eingebunden – Wechsel zu day.js sparte 3 Minuten Build-Zeit
Lösung 3: Teile der Pipeline in CI verlagern
• typecheck, lint in GitHub Actions
• Pages nur für den Build
Lösung 4: pnpm nutzen
• pnpm installiert Abhängigkeiten deutlich schneller
• In Pages: Build command: pnpm install && pnpm run build
Wie behebe ich Modulauflösungsfehler (Module not found)? Was bei falschen Umgebungsvariablen?
Typische Fehlermeldungen:
• Module not found: Error: Can't resolve './App' in '/opt/buildhome/repo/src'
• Did you mean 'App.js'?
• Oder [vite]: Rollup failed to resolve import '/src/components/Snackbar' from '/opt/buildhome/repo/src/pages/Login.jsx'
Sehr tückisch: lokal läuft alles, auf Pages fehlt das Modul. In 99 % der Fälle: Groß-/Kleinschreibung.
Ursache:
Linux unterscheidet strikt zwischen Groß- und Kleinschreibung, Windows und macOS standardmäßig nicht. import App from './app' mit Datei App.js – Windows ok, Linux Fehler.
Lösungen:
Lösung 1: Alle Import-Pfade korrigieren
• Jeden Import prüfen, Groß-/Kleinschreibung exakt an Dateinamen anpassen
• ESLint-Regel empfohlen: in .eslintrc.js
rules: { 'import/no-unresolved': 'error' }
Lösung 2: Pfad-Aliase nutzen
• Absolute Pfade oder Aliase vermeiden viele Probleme
• In vite.config.js resolve.alias konfigurieren
• Import: import Header from '@components/Header'
Umgebungsvariablen-Fehler:
Cloudflare Pages unterscheidet zwei Typen:
• Build-Zeit-Variablen: bei npm run build verfügbar, werden in den Code kompiliert
• Laufzeit-Variablen: nur in Functions (Edge Functions)
Bei rein statischen Sites (HTML/JS) sind Laufzeit-Variablen nicht verfügbar – nur Build-Zeit-Variablen.
Lösungen:
Lösung 1: Variablentyp korrekt konfigurieren
• Beim Anlegen in Pages: Production und Preview wählen
• Option Build muss aktiviert sein, wenn die Variable beim Build benötigt wird
Lösung 2: Framework-Namenskonventionen beachten
• Vite: Präfix VITE_
• Next.js öffentliche Variablen: NEXT_PUBLIC_
• Nuxt: runtimeConfig in nuxt.config.js
Lösung 3: Sensible Daten als Secret
• API Keys, Passwörter unbedingt als Secret-Typ speichern
Wie löse ich Git-Integrationsprobleme und fehlgeschlagene Functions-Deployments?
Typische Symptome:
• Keine Autorisierung für das Repository – Fehler: This repository is already in use by another Pages project
• Push löst keinen automatischen Build aus
Ursachen: GitHub/GitLab-Autorisierung oder Cloudflare-Limits (ein Repository nicht in mehreren Accounts).
Lösungen:
Lösung 1: GitHub App neu autorisieren
• GitHub: Settings > Applications > Cloudflare Pages > Configure > Uninstall
• In Cloudflare Dashboard Repository erneut verbinden
Lösung 2: Repository-Nutzung prüfen
• Fehlermeldung „already in use“: gleiches Repo in mehreren Cloudflare-Accounts?
• Nicht erlaubt – Pages-Projekt in anderen Accounts löschen
Lösung 3: GitHub-Berechtigungen prüfen
• Mindestens Maintainer-Rechte im Repository nötig
• Contributor reicht nicht
Lösung 4: Sonderzeichen vermeiden
• Keine Emojis oder Sonderzeichen in Commit Messages
• GitHub erlaubt es, Cloudflare parst es manchmal nicht korrekt
Functions-Deployment fehlgeschlagen:
Typische Symptome:
• Build erfolgreich, Deployment-Phase schlägt fehl
• Wenig aussagekräftige Logs
• Oder: Build failed: Functions bundle size exceeding limit
Ursachen:
• Worker-Bundle über 10 MB
• Functions Bindings (KV, D1, R2) falsch konfiguriert
• Node.js-spezifische APIs in Edge-Umgebung
Lösungen:
Lösung 1: Functions-Bundle-Größe analysieren
• Bundle Analyzer – was macht das Bundle so groß?
• Oft fehlendes Tree Shaking, ganze Bibliothek eingebunden
Lösung 2: Astro/SvelteKit Adapter optimieren
• Cloudflare Adapter korrekt konfigurieren
• Astro packt standardmäßig auch vorgerenderte Seiten in Functions – mode: 'directory' hilft
Lösung 3: Bindings prüfen
• Pages: Settings > Functions > Bindings
• KV, D1, R2 aus dem Code müssen konfiguriert sein
Lösung 4: Keine Node.js-spezifischen APIs
• Cloudflare Workers = V8, kein vollständiges Node.js
• fs, path (teilweise), child_process, net/http nicht verfügbar
• Logik ggf. in die Build-Phase verlagern
11 Min. Lesezeit · Veröffentlicht am: 1. Dez. 2025 · Aktualisiert am: 4. Juli 2026
Cloudflare Full Stack
Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.
Vorheriger
Cloudflare Pages Deployment: React/Vue/Next.js Konfiguration und Fehlerbehebung
Schritt-für-Schritt-Anleitung zum Deployment von React, Vue und Next.js auf Cloudflare Pages – mit vollständiger Konfigurations-Checkliste, Umgebungsvariablen und Lösungen für 5 häufige Fehler. Besonders: Next.js nodejs_compat-Konfiguration.
Teil 3 von 23
Nächster
Cloudflare-Cache-Hit-Rate nur 30 %? Mit diesen 3 Regeln auf 90 % bringen
Cloudflare cached standardmäßig kein HTML – die Hit-Rate bleibt niedrig? Schritt-für-Schritt-Anleitung für Cache Rules und Edge TTL: von 30 % auf 90 %, deutlich weniger Origin-Last. Mit vollständigen Schritten, Sicherheitshinweisen und Verifizierung.
Teil 5 von 23
Ähnliche Beiträge
Cloudflare Free Plan Limits 2026: Free, Pro und Business richtig wählen

Cloudflare Free Plan Limits 2026: Free, Pro und Business richtig wählen
Cloudflare Pages: Statischen Blog deployen – 5 Frameworks ohne typische Fehler


Kommentare
Melde dich mit GitHub an, um einen Kommentar zu hinterlassen