Fait partie de Hébergement par cadricielHébergement · Dépannage

Échec de compilation : trouvez la ligne qui compte, puis corrigez la cause.

La ligne qui explique une compilation en échec est rarement la dernière. Repérez l’étape qui a échoué (installation, compilation ou mise en production), ignorez les avertissements et lisez la première vraie erreur au-dessus de la ligne de sortie. Les causes habituelles : fichier de verrouillage périmé, mauvais répertoire racine, variable manquante, module natif ou mémoire insuffisante.

Faits vérifiés le

Lire un journal de compilation en échec

  • Trouvez l’étape. Un déploiement installe les dépendances, compile, exécute la commande de mise en production s’il y en a une, puis démarre l’appli. Sur Canner, le résumé nomme l’étape : install failed (exit 1) ou build failed (exit 1), suivi des lignes d’erreur retenues.
  • Ignorez les avertissements. Les lignes npm warn deprecated … et les avertissements de taille de paquet ne font pas échouer une compilation. Le résumé de Canner écarte les lignes marquées comme avertissements pour cette raison.
  • Remontez depuis la fin. Les dernières lignes sont d’habitude l’outil qui annonce sa sortie. La cause est la première ligne Error:, npm error, ✘ [ERROR] ou Type error: au-dessus.
  • Notez le code de sortie. Il indique si l’outil a échoué de lui-même ou s’il a été arrêté de l’extérieur (tableau ci-dessous).
Code de sortieSignificationCause habituelle à la compilation
1 †La commande a signalé une erreur et s’est terminéeN’importe laquelle : lisez les lignes d’erreur
134 †128 + 6 : le processus a avorté (SIGABRT)Node a atteint sa limite de tas : JavaScript heap out of memory
137 †128 + 9 : le processus a été tué (SIGKILL)La compilation a dépassé la mémoire permise par son conteneur

† Les détails sur les concurrents proviennent des pages publiées par chaque fournisseur aux dates indiquées; les prix et forfaits changent, vérifiez auprès du fournisseur avant de décider. 1 (2026-10-29) · 134 (2026-10-29) · 137 (2026-10-29)

Les causes courantes, avec le message exact

Voici les messages qu’affiche Canner et ceux des outils qu’il reconnaît. Sur un déploiement en échec, Canner affiche une fiche Comment corriger pour la cause trouvée, avec le journal brut à un clic sous Détails de l’erreur.

Le journal ditCe qui s’est passéCorrectif
A lockfile is required to deploy †Aucun package-lock.json, pnpm-lock.yaml, yarn.lock ni bun.lockb n’a été versionnéLancez l’installation de votre gestionnaire de paquets en local et versionnez le fichier de verrouillage
npm ci can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync, ERR_PNPM_OUTDATED_LOCKFILE, ou le message de Canner Your lockfile is out of sync with the manifest †package.json a changé sans réinstallationLancez npm install (ou pnpm install) en local, versionnez le fichier de verrouillage à jour, poussez
ERR_PNPM_LOCKFILE_BREAKING_CHANGE, ou This project is configured to use yarn de YarnLe fichier de verrouillage vient d’une autre version majeure de pnpm ou de YarnFixez-la : "packageManager": "pnpm@<version>" dans package.json. Le journal affiche alors [canner] using pnpm … (pinned by packageManager in package.json)
This repo holds a pnpm workspace, but the root itself has nothing to deploy. Found web, api.Un monodépôt, compilé depuis sa racineRéglez le répertoire racine sur l’appli, ou créez un projet Canner par appli à partir du même dépôt
No package.json or index.html found. ou Could not detect a supported projectRien à la racine ne ressemble à une appli; souvent une archive qui contient un dossier de tropVérifiez le répertoire racine; refaites l’archive pour que package.json soit au premier niveau
package.json engines.node=">=26" needs a Node version Canner doesn't offer (available: 24, 22).engines.node exclut toutes les versions de Node offertesÉlargissez ou retirez engines.node. Une plage qui exclut seulement la version par défaut du projet prend la plus récente qui convient, et le journal l’indique
[canner] ⚠ Native modules need a postinstall allowlist (sharp), puis Could not locate the bindings file ou NODE_MODULE_VERSIONLes scripts d’installation sont désactivés par défaut : le binaire natif n’a jamais été compiléAutorisez le script d’installation de ce paquet (code ci-dessous)
« Variable d’environnement manquante : RESEND_API_KEY » (fiche), à partir d’erreurs comme supabaseUrl is required ou Environment variable not found: DATABASE_URLLa compilation lit une valeur que le projet n’a pasAjoutez-la. La fiche propose un champ par variable nommée et Enregistrer et réessayer. Pour DATABASE_URL, créez une base de données : Canner la définit
Des erreurs de prisma migrate deploy ou drizzle-kit migrate pendant la compilationUne migration s’exécute dans la commande de compilationDéplacez-la dans la commande de mise en production (Paramètres → Build)
Module not found: Can't resolve './components/Header'Le paquet n’est pas installé, ou la casse de l’import ne correspond pas au fichier : macOS et Windows le tolèrent, Linux nonAjoutez la dépendance, ou corrigez les majuscules du chemin
build ran out of memory and was killed. ou JavaScript heap out of memory †La compilation a dépassé son budget de mémoireVoir JavaScript heap out of memory. Pour Next.js, la vérification de types est le pic habituel
The command stopped at a prompt that needs an answer: “…”Une commande a posé une question oui/non sans personne pour y répondreAjoutez son option non interactive (--yes, --force) ou passez la réponse : printf 'y' | votre-commande

† Les détails sur les concurrents proviennent des pages publiées par chaque fournisseur aux dates indiquées; les prix et forfaits changent, vérifiez auprès du fournisseur avant de décider. `A lockfile is required to deploy` (2026-10-29) · `npm ci can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync`, `ERR_PNPM_OUTDATED_LOCKFILE`, ou le message de Canner `Your lockfile is out of sync with the manifest` (2026-10-29) · `build ran out of memory and was killed.` ou `JavaScript heap out of memory` (2026-10-29)

Modules natifs : l’échec qui arrive plus tard

Canner installe les dépendances avec les scripts d’installation désactivés, par prudence face à la chaîne d’approvisionnement. La plupart des paquets n’en ont pas besoin. Ceux qui compilent ou téléchargent un binaire natif (sharp, bcrypt, better-sqlite3, canvas) s’installent sans erreur, puis échouent au premier import, parfois à l’exécution plutôt qu’à la compilation.

Le journal de compilation vous avertit avant, en nommant les paquets. Autorisez-les dans package.json; Canner recompile alors ceux-là seulement, sans accès au réseau :

// package.json: let these packages run their install script
{
  "canner": { "allowedBuildScripts": ["sharp", "better-sqlite3"] }
}

// pnpm projects can use pnpm's own setting instead
{
  "pnpm": { "onlyBuiltDependencies": ["sharp", "better-sqlite3"] }
}

Les commandes qui attendent une réponse

Un déploiement s’exécute sans surveillance. Quand une commande affiche quelque chose comme Would you like to proceed? (y/N) puis se tait environ 20 secondes, Canner considère qu’elle attend une réponse. Pour la commande de mise en production, la page du déploiement affiche la question et, si les réponses sont activées, propose Oui et Non; sans personne, elle s’arrête après 5 minutes en indiquant la question posée. La documentation des déploiements liste les options habituelles : --force pour prisma migrate reset et artisan migrate, --accept-data-loss pour prisma db push, --noinput pour collectstatic de Django.

La compilation passe, le déploiement échoue

Une compilation réussie doit encore démarrer. La nouvelle version doit répondre sur / (ou votre chemin de vérification d’état) en 30 secondes. app did not respond on / within 30s veut presque toujours dire que l’appli écoute sur un port codé en dur au lieu de process.env.PORT, ou qu’elle a planté au démarrage faute d’une variable. Le message d’échec inclut la fin du journal de votre appli, où se trouve d’habitude la trace. Un robot ou un exécuteur de tâches sans serveur Web doit être redéployé comme processus de fond (worker), ce qui saute la vérification. La documentation de dépannage couvre chaque cas.

Une commande de mise en production en échec arrête le déploiement avant le démarrage de la nouvelle version : la version en ligne continue de tourner.

Reproduisez l’erreur avant de pousser à nouveau

Les compilations qui « marchent sur mon poste » diffèrent presque toujours d’une de quatre façons : des fichiers non versionnés, un fichier de verrouillage pas à jour, un système de fichiers insensible à la casse ou une autre version de Node. Un conteneur Linux propre les écarte toutes :

# Reproduce a clean Linux build on your machine
docker run --rm -it -v "$PWD":/app -w /app node:22 \
  sh -c "npm ci && NODE_ENV=production npm run build"

Laissez votre agent lire le journal

Si vous travaillez avec Claude Code ou Cursor, le serveur MCP de Canner donne à l’agent l’outil canner_get_deployment, qui renvoie un déploiement au complet, journal de compilation inclus. Il peut lire l’échec, corriger le code et redéployer sans que vous copiiez de journaux. D’autres guides sont dans hébergement par cadriciel.

Questions

Pourquoi ma compilation marche-t-elle en local mais échoue-t-elle au déploiement?

En général : un fichier non versionné (souvent .env ou le fichier de verrouillage), un fichier de verrouillage désynchronisé de package.json, un import dont la casse ne fonctionne que sous macOS ou Windows, ou une autre version de Node. Compiler dans un conteneur Linux propre reproduit la plupart de ces cas.

Que veut dire le code de sortie 1 dans un journal de compilation?

Seulement que la commande a signalé une erreur. La cause est dans les lignes d’erreur au-dessus. Les codes 134 et 137 sont différents : le processus a avorté ou a été tué, presque toujours pour une question de mémoire.

Canner relance-t-il une compilation en échec?

Réessayer sur le déploiement relance le même commit ou le même téléversement, utile après avoir corrigé une variable ou quand un registre a eu un raté. Une compilation de production depuis GitHub qui manque de mémoire est aussi relancée automatiquement une fois par mois, avec plus de mémoire de compilation.

Où est le journal de compilation complet sur Canner?

Sur la page du déploiement dans le tableau de bord, diffusé en direct pendant la compilation. Un agent d’IA peut le lire avec l’outil MCP canner_get_deployment.

Des compilations qui disent ce qui ne va pas.

Chaque déploiement en échec sur Canner nomme la cause et le correctif, avec le journal complet à un clic.