Node.js
Detetado a partir do package.json. npm, yarn, pnpm ou bun conforme o lockfile.
Guias de deploy passo a passo: Node.js, Next.js, Nuxt, SvelteKit, Astro.
Consulte Buildpackspara ver como funcionam a deteção e a política de versões. Um repositório que também pareça um frontend estático é compilado aqui e, depois, o buildpack staticserve os ficheiros.
Deteção
package.json no Base directory.
Versões
A versão por omissão é o Node.js 24. Linhas publicadas em setembro de 2026: 22, 24, 25, 26. Recebe o patch mais recente da versão minor pedida.
Para fixar a versão, por esta ordem:
.node-version.nvmrcengines.nodeempackage.json(um intervalo como^22escolhe a versão publicada mais alta compatível)
Um v inicial é removido.
Instalação e build
O lockfile determina o gestor de pacotes: primeiro bun.lock ou bun.lockb (ou "packageManager": "bun@…" em package.json), depois pnpm-lock.yaml, depois yarn.lock e, caso contrário, npm. O lockfile é obrigatório (npm ci ou uma instalação frozen). Sem ele, o build falha.
Se o package.json tiver um script build, este é executado (bun run build para Bun, caso contrário npm run build). Depois, é executado um script heroku-postbuild, se existir. As dependências de desenvolvimento são removidas da imagem de execução (run image), exceto nas aplicações Next.js que arrancam com um next.config.* em TypeScript (estas mantêm o TypeScript no arranque).
O Yarn e o pnpm passam pelo Corepack. O Bun é instalado a partir do mirror de binários da Nodion (não do bun.sh durante o build da aplicação) e fica no PATH no arranque, para que um script de arranque que chame bun funcione. O processo por omissão continua a usar o script de arranque ou node, sem ser reescrito para Bun. No arranque, é definido NODE_ENV=production e node_modules/.bin é adicionado ao PATH.
Comando de arranque
Aplica-se a primeira opção disponível:
- O script
startempackage.json - O comando por omissão de um framework SSR conhecido (ver abaixo)
node server.js,index.jsouapp.js, se esse ficheiro existirnode .
Pode substituí-lo por um Procfile. A aplicação deve escutar em PORT.
Frameworks
- Next.js:
next start, exceto comoutput: 'export', que gera um site estático (out/). - Nuxt:
node .output/server/index.mjs - SvelteKit: estático com
adapter-static(build/), ounode buildcomadapter-node - Remix / React Router:
npx remix-serve ./build/server/index.js - Astro:
dist/estático, ounode ./dist/server/entry.mjsquando o output éserverouhybrid - Angular, Gatsby, Create React App, Eleventy, Vite: tratados como saída estática
PHP + Node (Laravel com Vite) e Ruby + Node (Rails com JS) são grupos poliglotas. Consulte PHPe Ruby.