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.nvmrcengines.nodedanspackage.json(une plage comme^22prend 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 :
- Le script
startdepackage.json - La commande par défaut d'un framework SSR connu (voir ci-dessous)
node server.js,index.jsouapp.js, si ce fichier existenode .
Un Procfile permet de la remplacer. Votre app doit écouter sur PORT.
Frameworks
- Next.js :
next start, sauf avecoutput: 'export', qui produit un site statique (out/). - Nuxt :
node .output/server/index.mjs - SvelteKit : statique avec
adapter-static(build/), ounode buildavecadapter-node - Remix / React Router :
npx remix-serve ./build/server/index.js - Astro :
dist/statique, ounode ./dist/server/entry.mjsquand l'output estserverouhybrid - 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.