tiee
ES
Guía de incorporación ejecutable

Detecta una versión de Node.js incompatible antes de instalar

Un paquete puede declarar "node": ">=20" y aún así dejar a un desarrollador con un fallo vago varios comandos después. Trata la versión de tiempo de ejecución como un contrato ejecutable: indícala, verifícala, y detente con una instrucción de reparación antes de instalar dependencias.

Preparado por Tiee · Cuatro afirmaciones de límite pasadas · Redacción asistida por IA, revisada manualmente

La verificación pequeña

Agrega un script sin dependencias en scripts/check-node-version.mjs:

const requiredMajor = 20;
const actualMajor = Number.parseInt(process.versions.node.split(".")[0], 10);

if (!Number.isInteger(actualMajor) || actualMajor < requiredMajor) {
  console.error(
    `Node.js ${requiredMajor}+ is required; found ${process.versions.node}. ` +
    "Install an active LTS release, then rerun npm install."
  );
  process.exit(1);
}

console.log(`Node.js ${process.versions.node} satisfies the Node.js ${requiredMajor}+ requirement.`);

Ejecutarlo antes de la ruta normal de instalación:

{
  "engines": { "node": ">=20" },
  "scripts": { "preinstall": "node scripts/check-node-version.mjs" }
}

El engines el campo permite que los gestores de paquetes y los sistemas de alojamiento inspeccionen el requisito. El script hace que el mismo requisito sea visible para alguien que use un gestor de paquetes que solo advierte sobre incompatibilidades de motor.

Haga que la documentación use la misma fuente de verdad

El inicio rápido debería decir exactamente lo que la verificación aplica:

### Prerequisite

- Node.js 20 or newer (`node --version`)

If the install stops at the runtime check, install an active Node.js LTS
release and run `npm install` again.

Una frase como “una versión reciente de Node.js” no puede ser probada, y se desplaza en cuanto el producto adopta una nueva línea base.

Pruebe ambas ramas sin cambiar los tiempos de ejecución

Extrae la comparación en una función pura para que la prueba de regresión pueda cubrir versiones soportadas y no soportadas:

export function supportsNode(version, requiredMajor = 20) {
  const major = Number.parseInt(version.split(".")[0], 10);
  return Number.isInteger(major) && major >= requiredMajor;
}
import assert from "node:assert/strict";
import { supportsNode } from "./supports-node.mjs";

assert.equal(supportsNode("18.20.8"), false);
assert.equal(supportsNode("20.0.0"), true);
assert.equal(supportsNode("22.19.0"), true);
assert.equal(supportsNode("not-a-version"), false);

Esta verificación es deliberadamente limitada. El conjunto de pruebas normal aún mantiene la compatibilidad con versiones principales más recientes. Esta verificación mantiene el mínimo declarado, el primer comando y el inicio rápido sin contradecirse entre sí.

Lista de verificación de aceptación

Este ejemplo independiente no afirma haberse probado en un repositorio ajeno. El código y las afirmaciones se revisaron manualmente tras una redacción asistida por IA.

¿Tienes un bloqueo en la primera ejecución?

Envía el repositorio y el resultado esperado. Podemos definir una primera entrega pequeña con criterios claros de aceptación.

Email Tiee