¿Cómo puedo especificar la versión requerida de Node.js en packages.json?

Tengo un proyecto Node.js que requiere Node versión 12 o superior. ¿Hay alguna manera de especificar esto en el archivo packages.json para que el instalador verifique e informe automáticamente a los usuarios si necesitan actualizar?

Creo que puedes usar el campo “motores”:

{ "engines" : { "node" : ">=0.12" } } 

Como dices que tu código definitivamente no funcionará con ninguna versión más baja, probablemente también quieras la bandera “engineStrict”:

 { "engineStrict" : true } 

La documentación del archivo packages.json se puede encontrar en el sitio npmjs

Actualizar

engineStrict ahora está en desuso, por lo que esto solo dará una advertencia. Ahora le corresponde al usuario ejecutar la npm config set engine-strict true si así lo desean.

Al igual que dijo Ibam, engineStrict ahora está en desuso. Pero encontré esta solución:

check-version.js:

 import semver from 'semver'; import { engines } from './package'; const version = engines.node; if (!semver.satisfies(process.version, version)) { console.log(`Required node version ${version} not satisfied with current version ${process.version}.`); process.exit(1); } 

package.json:

 { "name": "my package", "engines": { "node": ">=50.9" // intentionally so big version number }, "scripts": { "requirements-check": "babel-node check-version.js", "postinstall": "npm run requirements-check" } } 

Obtenga más información aquí: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

Y una cosa más … Un archivo de puntos ‘.nvmrc’ se puede usar para requerir una versión de nodo específica (pero aún no lo intenté) – https://github.com/creationix/nvm#nvmrc

Añadir

a package.json

  "engines": { "node": ">=10.0.0", "npm": ">=6.0.0" }, 

al archivo .npmrc (cerca de package.json , el mismo directorio)

 engine-strict=true 

Hay otra manera más simple de hacer esto:

  1. npm install Node@8 (guarda el nodo 8 como dependencia en package.json)
  2. Su aplicación se ejecutará utilizando el Nodo 8 para cualquier persona , ¡incluso para los usuarios de Yarn!

Esto funciona porque el node es solo un paquete que envía el nodo como su paquete binario. Simplemente incluye como node_module / .bin, lo que significa que solo hace que el nodo esté disponible para empaquetar scripts. No es el caparazón principal.

Vea la discusión en Twitter aquí: https://twitter.com/housecor/status/962347301456015360