Node.js
Erkannt über package.json. npm, yarn, pnpm oder bun aus dem Lockfile.
Siehe Buildpacksfür Detection und Versionspolitik. Ein Repo, das auch wie ein statisches Frontend aussieht, wird hier gebaut und dann vom staticBuildpack ausgeliefert.
Erkennt
package.json im Base directory.
Versionen
Default ist Node.js 24. Veröffentlichte Lines Stand September 2026: 22, 24, 25, 26. Du bekommst den neuesten Patch der angefragten Minor.
Pinnen, in dieser Reihenfolge:
.node-version.nvmrcengines.nodeinpackage.json(ein Range wie^22nimmt die höchste passende veröffentlichte Version)
Ein führendes v wird entfernt.
Install und Build
Das Lockfile wählt den Package-Manager: zuerst bun.lock oder bun.lockb (oder package.json "packageManager": "bun@…"), dann pnpm-lock.yaml, dann yarn.lock, sonst npm. Ein Lockfile ist Pflicht (npm ci oder ein frozen Install). Ohne scheitert der Build.
Hat package.json ein build-Skript, läuft das (bun run build für Bun, sonst npm run build). Ein heroku-postbuild-Skript läuft danach, wenn vorhanden. Dev-Dependencies werden für das Run-Image entfernt, außer Next.js-Apps, die mit einem TypeScript-next.config.* starten (die behalten typescript beim Launch).
Yarn und pnpm gehen über Corepack. Bun kommt vom Nodion-Binary-Mirror (nicht bun.sh zur App-Build-Zeit) und bleibt beim Launch auf PATH, damit ein Start-Skript mit bun funktioniert. Der Default-Prozess bleibt das Start-Skript oder node, nicht auf Bun umgeschrieben. Launch setzt NODE_ENV=production und legt node_modules/.bin auf PATH.
Start-Command
Der erste Treffer gewinnt:
- Das
start-Skript inpackage.json - Ein bekannter SSR-Framework-Default (siehe unten)
node server.js,index.jsoderapp.js, wenn diese Datei existiertnode .
Mit einer Procfile überschreiben. Auf PORT lauschen.
Frameworks
- Next.js:
next start, außeroutput: 'export', das ist eine statische Site (out/). - Nuxt:
node .output/server/index.mjs - SvelteKit: static mit
adapter-static(build/), odernode buildmitadapter-node - Remix / React Router:
npx remix-serve ./build/server/index.js - Astro: static
dist/, odernode ./dist/server/entry.mjswenn Outputserveroderhybridist - Angular, Gatsby, Create React App, Eleventy, Vite: als static Output behandelt
PHP + Node (Laravel mit Vite) und Ruby + Node (Rails mit JS) sind Polyglot-Gruppen. Siehe PHPund Ruby.