Échec de build CF Pages ? 8 problèmes courants et leurs solutions pour gagner une demi-journée de debug

Les logs de build Cloudflare Pages affichent « Failed » en rouge. Cinquième échec ce soir, démo client demain matin. Cinq cents lignes de logs, npm ERR! partout — par où commencer ? Les solutions trouvées en ligne n’ont pas toujours aidé, parfois empiré les choses.
La plupart des échecs CF Pages relèvent de trois catégories : différences d’environnement, configuration des dépendances, compatibilité de version. Maîtrisez ces schémas et 90 % des problèmes se résolvent en 10 minutes. Cet article décrit l’environnement de build Cloudflare Pages, 8 scénarios d’échec les plus courants (avec messages d’erreur réels et étapes complètes), plus des recommandations préventives. Vous aurez une méthode de diagnostic claire.
Partie 1 : comprendre l’environnement de build Cloudflare Pages
Spécificités de l’environnement de build Pages
Avant de diagnostiquer, une chose essentielle : l’environnement de build Cloudflare Pages diffère fondamentalement de votre machine locale. Souvent, l’échec de déploiement Pages n’est pas une erreur de code, mais une différence d’environnement.
Configuration par défaut :
- Système d’exploitation : Ubuntu (Build System V2 utilise Ubuntu 22)
- Version Node : 18.17.1 (oui, assez ancienne)
- Gestionnaire de paquets :
npm clean-installpar défaut, pasnpm install - Timeout de build : limite stricte de 20 minutes
- Taille Worker : limite de 10 Mo
Pourquoi Node si ancien ? Cloudflare privilégie la stabilité. Mais beaucoup de nouveaux paquets exigent Node >= 18.18.0 ou >= 20.0.0, d’où les conflits.
Trois différences clés avec l’environnement local :
-
Sensibilité à la casse du système de fichiers : sous Windows ou Mac,
import Header from './header'fonctionne même si le fichier estHeader.js. Sous Linux, la casse doit correspondre exactement. Piège souvent négligé. -
Différences réseau : en local vous pouvez utiliser un miroir npm ; Pages se connecte au registre officiel, parfois avec timeout.
-
Commande de build par défaut : Cloudflare exécute
npm clean-install --progress=falseavant votre build command. Bien plus strict quenpm install; si package-lock.json et package.json ne correspondent pas, erreur.
Méthode de localisation rapide
Vous savez que l’environnement diffère. Comment trouver la vraie cause ?
Étape 1 : lire les logs de build
Les logs font souvent des centaines de lignes, mais quelques points suffisent :
# Trouver le dernier ERR! ou ERROR
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
# Ou les erreurs Vite/Webpack
[vite]: Rollup failed to resolve import
# Ou les erreurs Git
fatal: unable to access repository
Mon expérience : chercher « ERR! » (avec le point d’exclamation), remonter 3-5 lignes — la cause y est généralement.
Étape 2 : sauvegarder le Deployment ID
À chaque échec, Cloudflare génère un Deployment ID unique, visible dans la barre d’adresse :
https://dash.cloudflare.com/xxx/pages/view/your-project/a398d794-7322-4c97-96d9-40b5140a8d9b
↑ Deployment ID
Ce ID est crucial pour le support Cloudflare ou une demande d’aide communautaire.
Étape 3 : reproduire en local
Étape souvent négligée. Reproduisez sous Linux :
# Méthode 1 : Docker Ubuntu 22
docker run -it ubuntu:22.04 bash
# Méthode 2 : npm ci strict (comme Pages)
npm ci
# Méthode 3 : version Node via nvm
nvm use 18.17.1
Si npm ci échoue en local, le problème est dans les dépendances. Si Node 18.17.1 fait planter, c’est la compatibilité de version.
Partie 2 : 8 scénarios d’échec courants et leurs solutions
Problème 1 : échec d’installation des dépendances (erreur npm install)
Messages d’erreur typiques :
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
ou
npm ERR! code ERR_SOCKET_TIMEOUT
npm ERR! network Socket timeout
Cas le plus fréquent. npm install OK en local, ERESOLVE sur Pages. Raison : Cloudflare utilise npm ci par défaut, très strict.
Causes :
npm clean-installne résout pas automatiquement les conflits peer dependency- package-lock.json et package.json désynchronisés
- Timeout réseau (registre npm officiel inaccessible)
Solutions (par ordre de recommandation) :
Solution 1 : ignorer l’installation par défaut, commande personnalisée
# Variable d'environnement dans les paramètres Pages
SKIP_DEPENDENCY_INSTALL=true
# Puis modifier la Build command
npm install --legacy-peer-deps && npm run build
Indique à Cloudflare de ne pas utiliser sa commande par défaut.
Solution 2 : corriger package-lock.json
# Régénérer le lock file en local
rm package-lock.json
npm install
git add package-lock.json
git commit -m "fix: regenerate package-lock.json"
git push
Parfois le lock file est simplement corrompu.
Solution 3 : GitHub Actions pour le build
Si les deux précédentes échouent, problème plus complexe. GitHub Actions + cloudflare/pages-action pour contrôler l’environnement :
# .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 : exécuter npm ci régulièrement en local.
Problème 2 : incompatibilité de version Node
Messages d’erreur typiques :
ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment
This package requires Node.js version ^18.18.0 or >=20.0.0
ou
The engine "node" is incompatible with this module.
Expected version ">=18.18.0". Got "18.17.1"
Node trop ancien. Beaucoup de paquets (TypeScript ESLint, Next.js 14+) exigent Node >= 18.18.0 ; Pages par défaut 18.17.1.
Solutions (une suffit) :
Solution 1 : variable d’environnement (recommandé)
Dans Cloudflare Pages Settings > Environment variables :
Nom: NODE_VERSION
Valeur: 20.11.0
Méthode officielle, simple et directe.
Solution 2 : fichier .node-version
echo "20.11.0" > .node-version
git add .node-version
git commit -m "chore: specify Node version for Cloudflare Pages"
Solution 3 : fichier .nvmrc
echo "20.11.0" > .nvmrc
Bonnes pratiques : utiliser variable d’environnement et .node-version pour cohérence local/production. Choisir une version LTS stable (ex. 20.11.0).
Problème 3 : timeout de build (plus de 20 minutes)
Symptôme typique :
Les logs montrent exactement 20 minutes puis arrêt, sans message d’erreur explicite :
Build exceeded maximum time of 20 minutes
Frustrant — peu d’information. Souvent gros projet ou trop de dépendances.
Causes :
- Trop de dépendances,
npm installseul prend 15 minutes - Script de build avec opérations redondantes
- Cache de build mal exploité
Solutions :
Solution 1 : vider le cache de build
Parfois le cache devient un fardeau :
Settings > Builds & deployments > Clear build cache
Reconstruire — plusieurs cas résolus ainsi.
Solution 2 : analyser et optimiser les dépendances
# Projet Next.js
npm install --save-dev @next/bundle-analyzer
# Puis dans next.config.js
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
module.exports = withBundleAnalyzer({
// votre config
})
Exécuter ANALYZE=true npm run build. J’ai remplacé moment.js par day.js : -3 minutes de build.
Solution 3 : déplacer certaines tâches vers CI
typecheck, lint dans GitHub Actions ; Pages ne fait que le build :
// package.json
{
"scripts": {
"build": "next build",
"build:full": "npm run typecheck && npm run lint && npm run build"
}
}
Solution 4 : utiliser pnpm
Installation plus rapide. Build command :
Build command: pnpm install && pnpm run build
Problème 4 : erreur de résolution de module (Module not found)
Messages d’erreur typiques :
Module not found: Error: Can't resolve './App' in '/opt/buildhome/repo/src'
Did you mean 'App.js'?
ou
[vite]: Rollup failed to resolve import '/src/components/Snackbar'
from '/opt/buildhome/repo/src/pages/Login.jsx'
Erreur insidieuse : OK en local, module introuvable sur Pages. 99 % des cas : problème de casse.
Cause :
Linux distingue strictement la casse ; Windows et macOS non. import App from './app' avec fichier App.js : OK sous Windows, erreur sous Linux.
Solutions :
Solution 1 : corriger tous les chemins d’import
Vérifier que la casse correspond exactement :
// ❌ Incorrect
import Header from './header'; // fichier Header.jsx
// ✅ Correct
import Header from './Header';
Vérification manuelle fastidieuse. Règle ESLint recommandée :
// .eslintrc.js
module.exports = {
rules: {
'import/no-unresolved': 'error',
}
}
Solution 2 : alias de chemins
// vite.config.js
export default {
resolve: {
alias: {
'@': '/src',
'@components': '/src/components'
}
}
}
// Import avec alias
import Header from '@components/Header';
Solution 3 : astuce communautaire
Un utilisateur a signalé une solution étrange mais efficace : renommer le dossier, commit, puis renommer à nouveau. Peut-être un problème de cache. À essayer si les autres solutions échouent.
Problème 5 : erreur de configuration des variables d’environnement
Symptômes typiques :
console.log(process.env.API_KEY); // undefined
Ou erreur de build indiquant une variable manquante.
Causes :
Confusion entre variables au build et au runtime. Conventions de nommage différentes selon le framework.
Point clé :
Deux types sur Cloudflare Pages :
- Variables au build : disponibles pendant
npm run build, compilées dans le code - Variables au runtime : uniquement dans les Functions edge
Site statique pur (HTML/JS) : pas de variables runtime.
Solutions :
Solution 1 : configurer correctement le type
Cocher Production et Preview ; cocher Build si nécessaire au build.
Solution 2 : conventions de nommage du framework
# Vite : préfixe VITE_
VITE_API_KEY=xxx
# Next.js public : préfixe NEXT_PUBLIC_
NEXT_PUBLIC_API_KEY=xxx
# Nuxt : runtimeConfig dans nuxt.config.js
Solution 3 : secrets pour les informations sensibles
Deux types : Text (visible) et Secret (chiffré). API key, mots de passe : toujours Secret.
Bonnes pratiques :
- Local : fichier
.env.local(dans.gitignore) - Production : variables Cloudflare Pages
- Valeurs différentes par environnement (Preview = API test, Production = API prod)
Problème 6 : problèmes d’intégration Git
Symptômes typiques :
- Impossible d’autoriser l’accès au dépôt
- Erreur : « This repository is already in use by another Pages project »
- Push sans déclenchement automatique du build
Causes :
Autorisation GitHub/GitLab, ou limitation Cloudflare (un dépôt par compte).
Solutions :
Solution 1 : réautoriser l’app GitHub
Settings > Applications > Cloudflare Pages > Configure > Uninstall
Reconnecter le dépôt dans le Dashboard Cloudflare.
Solution 2 : vérifier l’utilisation du dépôt
Si dépôt déjà utilisé, vérifier plusieurs comptes Cloudflare. Supprimer le projet Pages sur les autres comptes.
Solution 3 : permissions GitHub
Au minimum rôle Maintainer. Contributor seul : connexion impossible.
Solution 4 : éviter les caractères spéciaux
Pas d’emoji dans les messages de commit — peut empêcher le déclenchement du build.
Limitation connue : les PR de dépôts forkés ne déclenchent pas de preview. Cloudflare prévoit le support, pas encore disponible.
Problème 7 : échec de déploiement Functions
Symptômes typiques :
Build réussi mais échec au déploiement final, logs peu informatifs. Ou :
Build failed: Functions bundle size exceeding limit
Causes :
- Bundle Worker > 10 Mo
- Bindings Functions (KV, D1, R2) mal configurés
- API Node.js spécifiques non supportées en edge
Solutions :
Solution 1 : analyser la taille du bundle Functions
npm install --save-dev @next/bundle-analyzer
Souvent absence de tree-shaking.
Solution 2 : optimiser l’adaptateur Astro/SvelteKit
// astro.config.mjs
import cloudflare from '@astrojs/cloudflare';
export default {
output: 'hybrid',
adapter: cloudflare({
mode: 'directory',
}),
};
Astro embarque par défaut les pages pré-rendues dans Functions. mode: 'directory' corrige cela.
Solution 3 : vérifier les Bindings
Settings > Functions > Bindings
KV, D1, R2 correctement configurés.
Solution 4 : éviter les API Node.js spécifiques
Workers = V8, pas Node.js complet. Non disponibles :
fspath(partiel)child_processnet/http(utiliserfetch)
Déplacer la logique au build si nécessaire.
Problème 8 : cache et domaine personnalisé
Symptômes typiques :
- Déploiement réussi mais ancien contenu affiché
- Domaine personnalisé en 404,
.pages.devOK - Page d’accueil 404 Not Found
Causes :
- Page Rules Cloudflare interférant avec le cache Pages
- DNS du domaine personnalisé mal configuré
- Absence de
index.html
Solutions :
Solution 1 : supprimer la Page Rule Cache Everything
Si le domaine est Proxied (nuage orange), vérifier :
Rules > Page Rules
Supprimer toute règle « Cache Everything ». Pages a son propre mécanisme de cache.
Solution 2 : domaine personnalisé en DNS Only
DNS > Records > cliquer l'enregistrement > DNS Only
Sans proxy Cloudflare, connexion directe à Pages.
Solution 3 : vérifier index.html
Si la racine affiche 404, vérifier index.html dans le répertoire de sortie. Vérifier « Build output directory » dans Pages.
Solution 4 : purger le cache manuellement
Caching > Configuration > Purge Everything
Attention : purge tout le cache de la Zone.
Partie 3 : bonnes pratiques préventives
Configuration de build recommandée
Mieux vaut configurer dès le départ :
1. Spécifier explicitement la version Node
# Fichier .node-version
20.11.0
# Variable d'environnement Cloudflare Pages
NODE_VERSION=20.11.0
2. Commandes de build différentes par branche
Via CF_PAGES_BRANCH :
// 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';
// exécuter la commande correspondante
3. Monorepo : répertoire racine correct
Avec pnpm workspace ou Turborepo :
Root directory: apps/web
Build command: pnpm run build
Surveillance et techniques de debug
1. Environnement de debug local
Docker simulant Pages :
# Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nodejs npm
RUN node -v
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
2. Cloudflare Status
Parfois l’échec vient de Cloudflare lui-même :
https://www.cloudflarestatus.com/
Si Pages est en panne, attendre la résolution.
3. Quand contacter le support Cloudflare
Si toutes les solutions échouent, suspicion de bug plateforme, ou demande d’augmentation des limites (utilisateurs payants) — contacter le support avec Deployment ID et logs détaillés.
Conclusion
Les échecs de build CF Pages se réduisent à quelques catégories. Dans 90 % des cas : différences d’environnement (Node, casse des fichiers), configuration des dépendances (package-lock.json, peer dependency), ou mauvaise compréhension du fonctionnement Pages (variables d’environnement, cache).
Méthode systématique :
- Lire les logs pour trouver le vrai message d’erreur
- Identifier la catégorie (dépendances, version, chemins, config)
- Reproduire en local
- Appliquer la solution correspondante
- Configurer préventivement pour éviter la récidive
Gardez cet article comme guide de dépannage. Prochain échec de build : suivez cette méthode, résolution probable en 10 minutes. Quand le « ✓ Deployed » vert apparaît, le soulagement est incomparable.
D’autres problèmes Cloudflare Pages ? Partagez en commentaire — cela peut aider d’autres développeurs.
Processus complet de diagnostic des échecs de build Cloudflare Pages
De la compréhension de l’environnement de build à la résolution des 8 problèmes courants — 90 % des cas en 10 minutes
Estimated time: PT10M
-
1
Step 1: Comprendre les spécificités de l’environnement de build Cloudflare Pages
Configuration par défaut : -
2
Step 2: • Système d’exploitation
Ubuntu 22 (Build System V2) -
3
Step 3: • Version Node
18.17.1 (ancienne, peut être incompatible) -
4
Step 4: • Gestionnaire de paquets
npm clean-install par défaut, pas npm install -
5
Step 5: • Timeout de build
limite stricte de 20 minutes -
6
Step 6: • Taille Worker
limite de 10 Mo -
7
Step 7: Localisation rapide : lire les logs et sauvegarder le Deployment ID
Lire les logs : -
8
Step 8: Reproduire en local et résoudre l’échec d’installation des dépendances
Reproduire en local : -
9
Step 9: • Docker Ubuntu 22
docker run -it ubuntu:22.04 bash -
10
Step 10: • Node via nvm
nvm use 18.17.1 -
11
Step 11: Solution 1
commande personnalisée -
12
Step 12: • Build command
npm install —legacy-peer-deps && npm run build -
13
Step 13: Solution 2
corriger package-lock.json -
14
Step 14: Solution 3
GitHub Actions -
15
Step 15: Prévention
npm ci régulier en local. -
16
Step 16: Résoudre incompatibilité Node et timeout de build
Incompatibilité Node : -
17
Step 17: Solution 1
variable NODE_VERSION=20.11.0 (recommandé) -
18
Step 18: Solution 2
fichier .node-version -
19
Step 19: Solution 3
fichier .nvmrc -
20
Step 20: Bonnes pratiques
variable + .node-version, version LTS (20.11.0). -
21
Step 21: Solution 1
Clear build cache -
22
Step 22: Solution 2
bundle analyzer, remplacer moment.js par day.js -
23
Step 23: Solution 3
typecheck/lint dans GitHub Actions -
24
Step 24: Solution 4
pnpm install && pnpm run build -
25
Step 25: Résoudre erreurs de module et variables d’environnement
Résolution de module : -
26
Step 26: Solution 1
corriger les imports, ESLint import/no-unresolved -
27
Step 27: Solution 2
alias dans vite.config.js -
28
Step 28: Deux types
build (npm run build) et runtime (Functions edge). -
29
Step 29: Site statique
build uniquement. -
30
Step 30: Solution 1
cocher Production, Preview, Build -
31
Step 31: Solution 2
VITE_, NEXT_PUBLIC_, runtimeConfig Nuxt -
32
Step 32: Solution 3
type Secret pour API key et mots de passe -
33
Step 33: Résoudre intégration Git et déploiement Functions
Intégration Git : -
34
Step 34: Solution 1
réautoriser GitHub App -
35
Step 35: Solution 2
vérifier dépôt multi-comptes -
36
Step 36: Solution 3
rôle Maintainer minimum -
37
Step 37: Solution 4
pas d’emoji dans les commits -
38
Step 38: Causes
bundle > 10 Mo, Bindings mal configurés, API Node.js -
39
Step 39: Solution 1
bundle analyzer -
40
Step 40: Solution 2
mode: ‘directory’ pour Astro -
41
Step 41: Solution 3
Settings > Functions > Bindings -
42
Step 42: Solution 4
éviter fs, child_process, net/http
FAQ
Quelle est la configuration par défaut de l'environnement de build Cloudflare Pages ? En quoi diffère-t-elle du local ?
• Système d'exploitation : Ubuntu 22 (Build System V2)
• Version Node : 18.17.1 (ancienne, peut être incompatible avec de nouveaux paquets)
• Gestionnaire de paquets : npm clean-install par défaut, pas npm install
• Timeout de build : limite stricte de 20 minutes
• Taille Worker : limite de 10 Mo
Trois différences clés avec l'environnement local :
1) Sensibilité à la casse du système de fichiers :
• Linux distingue strictement la casse, Windows/Mac non
• import Header from './header' alors que le fichier est Header.js provoque une erreur sous Linux
• Piège souvent négligé
2) Différences réseau :
• En local, vous pouvez utiliser un miroir npm
• L'environnement Pages se connecte directement au registre npm officiel, parfois avec timeout
3) Différence de commande de build par défaut :
• Cloudflare exécute automatiquement npm clean-install --progress=false avant votre build command
• Cette commande est bien plus stricte que npm install ; si package-lock.json et package.json ne correspondent pas, erreur
Pourquoi Node si ancien ? Cloudflare privilégie la stabilité. Mais beaucoup de nouveaux paquets exigent Node >= 18.18.0 ou >= 20.0.0, d'où les conflits de version.
Comment localiser rapidement un échec de build Cloudflare Pages ?
Les logs font souvent des centaines de lignes, mais quelques points suffisent :
• Trouver le dernier ERR! ou ERROR (npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve)
• Ou les erreurs Vite/Webpack ([vite]: Rollup failed to resolve import)
• Ou les erreurs Git (fatal: unable to access repository)
Mon expérience : chercher ERR! (avec le point d'exclamation), remonter 3-5 lignes — la cause y est généralement. Ne vous laissez pas distraire par la sortie d'installation.
Étape 2 : sauvegarder le Deployment ID
À chaque échec, Cloudflare génère un Deployment ID unique, visible dans la barre d'adresse :
https://dash.cloudflare.com/xxx/pages/view/your-project/a398d794-7322-4c97-96d9-40b5140a8d9b
Ce ID est crucial pour le support Cloudflare ou une demande d'aide communautaire.
Étape 3 : reproduire en local
Essayez de reproduire sous Linux :
• Docker Ubuntu 22 : docker run -it ubuntu:22.04 bash
• npm ci strictement comme Pages
• Node via nvm : nvm use 18.17.1
Si npm ci échoue en local, le problème est dans les dépendances.
Si Node 18.17.1 fait planter, c'est un problème de compatibilité de version.
Comment résoudre un échec d'installation des dépendances (erreur npm install) ?
• 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
• Ou npm ERR! code ERR_SOCKET_TIMEOUT, npm ERR! network Socket timeout
Cas le plus fréquent : npm install OK en local, ERESOLVE sur Pages. Raison : Cloudflare utilise npm ci par défaut, très strict.
Causes :
• npm clean-install ne résout pas automatiquement les conflits peer dependency
• package-lock.json et package.json désynchronisés
• Timeout réseau (registre npm officiel inaccessible)
Solutions (par ordre de recommandation) :
Solution 1 : ignorer l'installation par défaut, commande personnalisée
• Variable d'environnement SKIP_DEPENDENCY_INSTALL=true dans les paramètres Pages
• Build command : npm install --legacy-peer-deps && npm run build
• Indique à Cloudflare de ne pas utiliser sa commande par défaut
Solution 2 : corriger package-lock.json
• Régénérer en local :
rm package-lock.json
npm install
git add package-lock.json
git commit -m "fix: regenerate package-lock.json"
git push
Solution 3 : GitHub Actions pour le build
• Si les deux précédentes échouent, problème plus complexe
• GitHub Actions + cloudflare/pages-action
• Contrôle total de l'environnement de build
Prévention : exécuter npm ci régulièrement en local pour vérifier la synchronisation du lock file.
Comment résoudre une incompatibilité de version Node ? Que faire en cas de timeout de build ?
Messages typiques :
• ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment
• This package requires Node.js version ^18.18.0 or >=20.0.0
• Ou The engine "node" is incompatible with this module. Expected version ">=18.18.0". Got "18.17.1"
Node trop ancien. Beaucoup de paquets (TypeScript ESLint, Next.js 14+) exigent Node >= 18.18.0, Pages par défaut 18.17.1.
Solutions :
Solution 1 : variable d'environnement (recommandé)
• Settings > Environment variables dans Cloudflare Pages
• Nom : NODE_VERSION
• Valeur : 20.11.0
• Méthode officielle recommandée
Solution 2 : fichier .node-version
• À la racine : echo "20.11.0" > .node-version
Solution 3 : fichier .nvmrc
• Similaire : echo "20.11.0" > .nvmrc
Bonnes pratiques :
Utiliser à la fois la variable d'environnement et .node-version pour cohérence local/production. Choisir une version LTS stable (ex. 20.11.0), pas la dernière.
Timeout de build :
Symptôme typique :
Logs montrant exactement 20 minutes puis arrêt, sans message d'erreur explicite, seulement : Build exceeded maximum time of 20 minutes.
Solutions :
Solution 1 : vider le cache de build
• Settings > Builds & deployments > Clear build cache
• Reconstruire — j'ai vu plusieurs cas résolus ainsi
Solution 2 : analyser et optimiser les dépendances
• bundle analyzer pour les gros paquets
• J'ai remplacé moment.js par day.js : -3 minutes de build
Solution 3 : déplacer certaines tâches vers CI
• typecheck, lint dans GitHub Actions
• Pages ne fait que le build
Solution 4 : utiliser pnpm
• Installation plus rapide que npm
• Build command : pnpm install && pnpm run build
Comment résoudre une erreur de résolution de module (Module not found) ? Erreur de configuration des variables d'environnement ?
Messages typiques :
• Module not found: Error: Can't resolve './App' in '/opt/buildhome/repo/src'
• Did you mean 'App.js'?
• Ou [vite]: Rollup failed to resolve import '/src/components/Snackbar' from '/opt/buildhome/repo/src/pages/Login.jsx'
Erreur très insidieuse : OK en local, module introuvable sur Pages. 99 % des cas : problème de casse.
Cause :
Linux distingue strictement la casse ; Windows et macOS non. import App from './app' avec fichier App.js : OK sous Windows, erreur sous Linux.
Solutions :
Solution 1 : corriger tous les chemins d'import
• Vérifier que la casse correspond exactement
• Règle ESLint : rules: { 'import/no-unresolved': 'error' }
Solution 2 : alias de chemins
• resolve.alias dans vite.config.js
• import Header from '@components/Header'
Variables d'environnement :
Deux types sur Cloudflare Pages :
• Variables au build : disponibles pendant npm run build, compilées dans le code
• Variables au runtime : uniquement dans les Functions edge
Site statique pur (HTML/JS) : pas de variables runtime, seulement build.
Solutions :
Solution 1 : configurer correctement le type
• Cocher Production et Preview
• Cocher Build si nécessaire au build
Solution 2 : conventions de nommage du framework
• Vite : préfixe VITE_
• Next.js public : préfixe NEXT_PUBLIC_
• Nuxt : runtimeConfig dans nuxt.config.js
Solution 3 : secrets pour les informations sensibles
• API key, mots de passe base de données : type Secret
Comment résoudre les problèmes d'intégration Git et les échecs de déploiement Functions ?
Symptômes typiques :
• Impossible d'autoriser l'accès au dépôt, erreur This repository is already in use by another Pages project
• Push sans déclenchement automatique du build Pages
Causes : autorisation GitHub/GitLab, ou limitation Cloudflare (un dépôt ne peut pas être utilisé par plusieurs comptes).
Solutions :
Solution 1 : réautoriser l'app GitHub
• GitHub Settings > Applications > Cloudflare Pages > Configure > Uninstall
• Reconnecter le dépôt dans le Dashboard Cloudflare
Solution 2 : vérifier l'utilisation du dépôt
• Si dépôt déjà utilisé, vérifier plusieurs comptes Cloudflare
• Supprimer le projet Pages sur les autres comptes
Solution 3 : permissions GitHub
• Au minimum rôle Maintainer pour l'intégration
• Contributor seul : connexion impossible
Solution 4 : éviter les caractères spéciaux
• Pas d'emoji dans les messages de commit
• Peut empêcher le déclenchement du build
Échec déploiement Functions :
Symptômes :
• Build réussi mais échec au déploiement final
• Logs peu informatifs
• Ou Build failed: Functions bundle size exceeding limit
Causes :
• Bundle Worker > 10 Mo
• Bindings Functions (KV, D1, R2) mal configurés
• API Node.js spécifiques non supportées en edge
Solutions :
Solution 1 : analyser la taille du bundle Functions
• bundle analyzer
• Souvent absence de tree-shaking
Solution 2 : optimiser l'adaptateur Astro/SvelteKit
• mode: 'directory' pour éviter d'embarquer les pages pré-rendues
Solution 3 : vérifier les Bindings
• Settings > Functions > Bindings
• KV, D1, R2 correctement configurés
Solution 4 : éviter les API Node.js spécifiques
• Workers = environnement V8, pas Node.js complet
• fs, path partiel, child_process, net/http non disponibles
• Déplacer la logique au build si nécessaire
12 min de lecture · Publié le: 1 déc. 2025 · Mis à jour le: 27 juil. 2026
Cloudflare Full Stack
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Guide complet Cloudflare Pages : déployer React/Vue/Next.js (config + erreurs courantes)
Déployez React, Vue et Next.js sur Cloudflare Pages pas à pas : checklist de configuration, variables d'environnement et 5 erreurs fréquentes. Focus sur nodejs_compat pour Next.js afin d'éviter les pièges.
Partie 3 sur 23
Suivant
Taux de cache Cloudflare bloqué à 30 % ? 3 règles pour viser 90 %
Cloudflare ne met pas le HTML en cache par défaut ? Guide pas à pas avec Cache Rules et Edge TTL pour passer de 30 % à 90 %, réduire fortement la charge serveur. Étapes complètes, sécurité et vérification.
Partie 5 sur 23



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire