Le déploiement CLI qui ne démarre jamais

Un vercel deploy --prod bloqué sans jamais passer à l’état “Building”, sans message d’erreur, vient dans la grande majorité des cas d’un fichier .vercelignore manquant : la CLI tente d’envoyer tout le répertoire de travail, y compris node_modules, et se heurte aux limites d’upload de Vercel. Créer un .vercelignore minimal règle le problème en quelques minutes.

Le 15 mai 2026, sur un projet Astro, on a lancé trois vercel deploy --prod de suite sans obtenir la moindre sortie sur le terminal. Pas d’erreur, pas de logs, rien : la commande restait suspendue comme si elle attendait indéfiniment. En creusant, le CLI tentait d’envoyer environ 200 Mo de node_modules à chaque tentative. Un .vercelignore a réglé le problème dès le quatrième essai.

Ce symptôme est trompeur parce qu’il ne ressemble pas à une erreur classique. Pas de code HTTP, pas de stack trace, juste un blocage silencieux avant même que le build ne démarre côté serveur. C’est normal : le problème se situe avant la construction du projet, au moment de l’upload des fichiers.

Pourquoi ça arrive

Le CLI Vercel est l’outil en ligne de commande qui permet de déployer un projet directement depuis un terminal, sans passer par une intégration Git. Contrairement à un déploiement déclenché par un push Git, le CLI compresse et envoie tout ce qui se trouve dans le répertoire courant, sauf ce qui est explicitement exclu.

Les causes les plus fréquentes de ce blocage :

Un cas documenté publiquement illustre l’ampleur du problème : un .vercelignore absent a conduit à l’upload de 202 843 fichiers et à un blocage de compte Vercel de 24 heures, le temps que la plateforme traite la charge anormale source : GitHub, fderuiter/portfolio #854.

1. Reconnaître le symptôme avant de chercher plus loin

Avant toute correction, confirme que tu es bien face à ce cas précis. Les signes typiques :

Si ces quatre points correspondent, tu es très probablement dans ce cas de figure plutôt que face à un problème de build ou de configuration serveur.

2. Vérifier ce que la CLI s’apprête réellement à envoyer

Avant de corriger à l’aveugle, utilise vercel deploy --dry pour voir la liste des fichiers que la CLI compte inclure dans l’upload, sans réellement déclencher le déploiement source : dev.to, Vercel CLI dry-run. Cette commande transforme un déploiement à l’aveugle en inspection préalable : tu vois immédiatement si node_modules, un .env égaré ou un dossier de build s’y trouvent.

Si la liste affichée compte plusieurs milliers de fichiers alors que ton projet source en contient une centaine, le diagnostic est confirmé.

3. Créer un .vercelignore minimal à la racine

Un fichier .vercelignore est un fichier texte placé à la racine du projet qui indique à la CLI Vercel quels fichiers et dossiers exclure du processus de déploiement, avec une syntaxe identique à celle d’un .gitignore source : Vercel, Exclude Files from Deployments.

Pour un projet Astro classique, un .vercelignore minimal suffit :

node_modules/
.git/
.vercel/
dist/
.astro/

C’est exactement la combinaison qui a réglé le blocage du 15 mai 2026 sur le projet cité plus haut. Place ce fichier à la racine, au même niveau que package.json, puis relance vercel deploy --prod.

Vercel exclut déjà par défaut une liste de fichiers sans configuration supplémentaire : .git, .svn, .cache, .next, .now, .vercel, .npmignore, .dockerignore, .gitignore, .env.local, node_modules, __pycache__, entre autres source : Vercel, Build Features. Mais cette liste par défaut n’est pas toujours suffisante ni appliquée de façon homogène selon le mode de déploiement, d’où l’intérêt d’un fichier explicite plutôt que de compter sur le comportement implicite.

4. Vérifier l’effet avec un nouveau dry-run

Relance vercel deploy --dry après avoir ajouté le .vercelignore. Le nombre de fichiers listés doit chuter drastiquement, de plusieurs dizaines de milliers à quelques centaines dans la plupart des projets Astro ou Next.js standards. Si le nombre reste anormalement élevé, vérifie que le .vercelignore est bien à la racine du projet déployé et non dans un sous-dossier, un piège fréquent dans les monorepos où Vercel applique en priorité le .vercelignore du répertoire racine du projet plutôt que celui du dépôt entier source : Vercel, Exclude Files from Deployments.

5. Comprendre pourquoi les déploiements Git ne sont pas concernés

C’est le point qui surprend le plus : si ce même projet est connecté à Vercel via l’intégration Git et déployé par un git push, ce blocage n’apparaît pas. Vercel ne clone alors que les fichiers commités dans le dépôt, et le .gitignore du projet filtre déjà node_modules en amont, avant même que Vercel n’intervienne source : GitHub, Extending .vercelignore.

Un exemple chiffré documenté illustre bien l’écart entre les deux chemins de déploiement : sur un même projet, un déploiement CLI prébuilt comptait 30 305 fichiers à traiter, contre seulement 2 087 fichiers lors d’un déploiement déclenché directement par Git source : GitHub, vercel/vercel #10613. La différence tient uniquement à la source des fichiers envoyés : le disque local complet dans un cas, le contenu du dépôt Git filtré dans l’autre.

Concrètement, si ton workflow permet de basculer vers un déploiement automatique par push Git plutôt que par CLI manuelle, tu élimines la classe entière de ce problème. C’est aussi ce qui rend les pipelines CI/CD plus fiables sur la durée qu’un déploiement manuel répété.

Cause → solution : tableau récapitulatif

CauseSymptômeSolution
.vercelignore absentBlocage silencieux avant “Building”Créer un .vercelignore à la racine
node_modules inclus dans l’uploadUpload de dizaines de milliers de fichiersAjouter node_modules/ au .vercelignore
Plafond de 15 000 fichiers dépasséÉchec ou blocage sans messageRéduire le nombre de fichiers envoyés
Plafond de taille dépassé (100 Mo Hobby / 1 Go Pro)Upload qui traîne indéfinimentExclure les dossiers volumineux (dist/, .astro/)
Déploiement CLI systématiquement lentPas de filtrage en amontPasser à un déploiement déclenché par Git
Monorepo avec plusieurs .vercelignoreFiltrage incohérent selon le sous-projetPlacer le .vercelignore à la racine du projet Vercel concerné

FAQ

Le .vercelignore fonctionne-t-il comme un .gitignore ?

Oui, la syntaxe est identique. Un caractère générique /* en première ligne exclut tout à la racine, puis des lignes commençant par ! peuvent réintroduire des exceptions source : Vercel, Exclude Files from Deployments.

Pourquoi mon .vercelignore ne s'applique pas en déploiement prébuilt ?

Le dossier .vercel/output généré par vercel build n’est pas ignoré automatiquement lors d’un vercel deploy --prebuilt, conformément à la spécification Build Output API source : Vercel, Build Features. Certaines versions récentes de la CLI (56 à 59) ont aussi modifié la façon dont le .vercelignore s’applique aux fichiers prébuilts, avec parfois des exclusions incorrectes de fichiers nécessaires.

Combien de fichiers puis-je déployer via la CLI Vercel ?

15 000 fichiers sources maximum, avec une taille totale limitée à 100 Mo sur le plan Hobby et 1 Go sur le plan Pro source : Vercel, Limits. Au-delà, l’upload échoue ou reste bloqué sans message clair.

Dois-je toujours utiliser un .vercelignore même avec un déploiement Git ?

C’est moins critique puisque Git ne transmet que les fichiers commités, filtrés par .gitignore en amont source : GitHub, Extending .vercelignore. Un .vercelignore reste utile pour exclure des fichiers commités mais inutiles au déploiement, comme des fichiers de documentation ou de tests.

Le blocage peut-il venir d'autre chose que node_modules ?

Oui, des dossiers de cache, des exports de build dupliqués, ou de gros fichiers médias non exclus peuvent produire le même symptôme. Le dry-run reste le meilleur moyen de vérifier ce qui part réellement à l’upload source : dev.to, Vercel CLI dry-run.

Quand passer la main à un pro

Si le .vercelignore minimal ne résout rien, si tu es sur un monorepo avec plusieurs projets Vercel imbriqués, ou si un déploiement prébuilt continue d’exclure des fichiers nécessaires malgré tes réglages, le problème touche à la configuration du pipeline de build plutôt qu’à une simple liste d’exclusion. C’est le moment de faire auditer la configuration de déploiement plutôt que de multiplier les tentatives à l’aveugle. Ce type de réglage fait partie de ce qu’une maintenance par abonnement couvre normalement en amont, avant que le blocage n’arrive en production. Pour comparer les plateformes de déploiement disponibles selon ton projet, l’article sur Netlify ou Vercel détaille les différences concrètes. Et si le problème touche un déploiement post-migration vers Astro, la checklist de migration WordPress vers Astro sans casser le SEO couvre les autres pièges fréquents de ce type de projet.

Ce problème, Peechy s'en occupe

Plutôt que de tout gérer seul, confiez votre site à une agence qui s'occupe de tout, hébergement, sécurité, maintenance et corrections. Encore plus simple en abonnement : on règle les soucis avant même que vous les remarquiez.

Confier mon site à Peechy