Node.js

Détecté via package.json. npm, yarn, pnpm ou bun selon le lockfile.

Guides de déploiement pas à pas : Node.js, Next.js, Nuxt, SvelteKit, Astro.

Consultez Buildpackspour comprendre la détection et la politique de versions. Si un dépôt ressemble aussi à un frontend statique, le build se fait ici, puis le buildpack staticsert les fichiers.

Détection

package.json dans le Base directory.

Versions

Par défaut, Node.js 24. Branches publiées en septembre 2026 : 22, 24, 25, 26. Vous obtenez le dernier correctif de la version mineure demandée.

Pour fixer la version, dans cet ordre :

  • .node-version
  • .nvmrc
  • engines.node dans package.json (une plage comme ^22 prend la version publiée la plus haute qui correspond)

Un v initial est supprimé.

Installation et build

Le lockfile détermine le gestionnaire de paquets : d'abord bun.lock ou bun.lockb (ou "packageManager": "bun@…" dans package.json), puis pnpm-lock.yaml, puis yarn.lock, sinon npm. Un lockfile est obligatoire (npm ci ou une installation frozen). Sans lockfile, le build échoue.

Si package.json contient un script build, il est exécuté (bun run build pour Bun, sinon npm run build). Un script heroku-postbuild s'exécute ensuite, s'il existe. Les dépendances de développement sont retirées de l'image d'exécution (run image), sauf pour les apps Next.js qui démarrent avec un next.config.* en TypeScript (elles conservent TypeScript au lancement).

Yarn et pnpm passent par Corepack. Bun est installé depuis le miroir de binaires de Nodion (et non depuis bun.sh pendant le build de l'app) et reste dans le PATH au lancement, afin que les scripts de démarrage qui appellent bun fonctionnent. La commande par défaut reste le script de démarrage ou node, sans être adaptée à Bun. Au lancement, NODE_ENV=production est défini et node_modules/.bin est ajouté au PATH.

Commande de démarrage

La première correspondance l'emporte :

  1. Le script start de package.json
  2. La commande par défaut d'un framework SSR connu (voir ci-dessous)
  3. node server.js, index.js ou app.js, si ce fichier existe
  4. node .

Un Procfile permet de la remplacer. Votre app doit écouter sur PORT.

Frameworks

  • Next.js : next start, sauf avec output: 'export', qui produit un site statique (out/).
  • Nuxt : node .output/server/index.mjs
  • SvelteKit : statique avec adapter-static (build/), ou node build avec adapter-node
  • Remix / React Router : npx remix-serve ./build/server/index.js
  • Astro : dist/ statique, ou node ./dist/server/entry.mjs quand l'output est server ou hybrid
  • Angular, Gatsby, Create React App, Eleventy, Vite : traités comme une sortie statique

PHP + Node (Laravel avec Vite) et Ruby + Node (Rails avec JS) sont des groupes polyglottes. Consultez PHPet Ruby.

Offrez un cloud à votre agent.

Jusqu'à 15 € de crédit de bienvenue à l'inscription.

Continuer avec GitHub

ou par e-mail

Restez informé.

Les nouveautés du produit, sans spam. Désabonnez-vous à tout moment.