Node.js

Se detecta por package.json. npm, yarn, pnpm o bun según el lockfile.

Guías de despliegue paso a paso: Node.js, Next.js, Nuxt, SvelteKit, Astro.

Consulta Buildpackspara ver cómo funcionan la detección y la política de versiones. Un repo que además parece un frontend estático se compila aquí y después lo sirve el buildpack static.

Detección

package.json en el directorio base.

Versiones

La versión por defecto es Node.js 24. Ramas publicadas a septiembre de 2026: 22, 24, 25, 26. Recibes el último parche de la versión minor solicitada.

Para fijar la versión, por este orden:

  • .node-version
  • .nvmrc
  • engines.node en package.json (un rango como ^22 elige la versión publicada más alta que encaje)

Se elimina una v inicial.

Instalación y build

El lockfile decide el gestor de paquetes: primero bun.lock o bun.lockb (o "packageManager": "bun@…" en package.json), después pnpm-lock.yaml, después yarn.lock y, si no hay ninguno, npm. El lockfile es obligatorio (npm ci o una instalación frozen). Sin él, la build falla.

Si package.json tiene un script build, se ejecuta (bun run build con Bun, npm run build en los demás casos). Después se ejecuta el script heroku-postbuild, si existe. Las dependencias de desarrollo se eliminan de la imagen de runtime, salvo en las apps Next.js que arrancan con un next.config.* en TypeScript (esas conservan typescript al arrancar).

Yarn y pnpm pasan por Corepack. Bun se instala desde el mirror de binarios de Nodion (no desde bun.sh durante la build de la app) y se queda en el PATH al arrancar, así que un script de inicio que llame a bun funciona. El proceso por defecto sigue siendo el script de inicio o node; no se reescribe para Bun. Al arrancar se define NODE_ENV=production y se añade node_modules/.bin al PATH.

Comando de inicio

Gana la primera coincidencia:

  1. El script start de package.json
  2. El comando por defecto de un framework SSR conocido (ver abajo)
  3. node server.js, index.js o app.js, si ese archivo existe
  4. node .

Puedes sobrescribirlo con un Procfile. Tu app debe escuchar en PORT.

Frameworks

  • Next.js: next start, salvo con output: 'export', que genera un sitio estático (out/).
  • Nuxt: node .output/server/index.mjs
  • SvelteKit: estático con adapter-static (build/), o node build con adapter-node
  • Remix / React Router: npx remix-serve ./build/server/index.js
  • Astro: dist/ estático, o node ./dist/server/entry.mjs cuando el output es server o hybrid
  • Angular, Gatsby, Create React App, Eleventy, Vite: se tratan como salida estática

PHP + Node (Laravel con Vite) y Ruby + Node (Rails con JS) son grupos de buildpacks para varios lenguajes. Consulta PHPy Ruby.

Dale a tu agente un cloud.

Hasta 15 € de crédito al registrarte.

Continuar con GitHub

o con tu email

Mantente al día.

Novedades del producto, sin spam. Puedes darte de baja cuando quieras.