Tengo un proyecto Node.js que requiere Node versión 12 o superior. ¿Hay alguna forma de especificar esto en el archivo packages.json, para que el instalador verifique e informe a los usuarios automáticamente si necesitan actualizar?
Tengo un proyecto Node.js que requiere Node versión 12 o superior. ¿Hay alguna forma de especificar esto en el archivo packages.json, para que el instalador verifique e informe a los usuarios automáticamente si necesitan actualizar?
Respuestas:
Creo que puedes usar el campo "motores":
{ "engines" : { "node" : ">=0.12" } }
Como está diciendo que su código definitivamente no funcionará con ninguna versión anterior, probablemente también desee el indicador "engineStrict":
{ "engineStrict" : true }
La documentación para el archivo package.json se puede encontrar en el sitio npmjs
Actualizar
engineStrict
ahora está en desuso, por lo que esto solo dará una advertencia. Ahora depende del usuario ejecutar npm config set engine-strict true
si quiere esto.
Actualización 2
Como señaló Ben a continuación, la creación de un .npmrc
archivo en la raíz de su proyecto (el mismo nivel que su archivo package.json) con el texto engine-strict=true
forzará un error durante la instalación si la versión del Nodo no es compatible.
engineStrict
ha quedado en desuso durante varios meses, produciendo advertencias cuando se usó. Comenzando con npm @ 3, el valor de se ignora el campo, y las violaciones del motor solo producirán advertencias. Si, como usuario, desea una aplicación estricta del campo de los motores, simplemente ejecute npm config set engine-estricto verdadero "
cd .. && npm i <folder-name>
para verificar el proyecto en sí. Sin embargo, esto desencadenará una construcción completa en sí mismo.
engine-strict=true
a su .npmrc ahora tiene el mismo efecto
Añadir
a package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
al archivo .npmrc
(cerca del package.json
mismo directorio)
engine-strict=true
npm install
; trabaja con yarn
así
package.json
con una sección de "motores" similar a la anterior ( 11.13.0
y 6.7.0
), y una .npmrc
con nada más que el contenido especificado anteriormente. Nvm me cambió a una versión de nodo anterior, luego ejecuté npm install
, pero solo instala las dependencias y ni siquiera menciona la falta de coincidencia de la versión del motor.
Al igual que dijo Ibam, engineStrict
ahora está en desuso. Pero he encontrado 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. Se puede usar un archivo de puntos '.nvmrc' para requerir una versión de nodo específica: https://github.com/creationix/nvm#nvmrc
Pero, solo es respetado por los scripts npm (y los scripts de hilo).
.nvmrc
Si está utilizando NVM de esta manera , lo que probablemente debería, entonces puede indicar la versión de nodejs requerida para un proyecto determinado en un .nvmrc
archivo con seguimiento de git :
echo v10.15.1 > .nvmrc
Esto no tiene efecto automáticamente cd
, lo cual es sensato: el usuario debe hacer lo siguiente:
nvm use
y ahora esa versión del nodo se usará para el shell actual.
Puede enumerar las versiones de nodo que tiene con:
nvm list
.nvmrc
está documentado en: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
cd
Se preguntó cómo seleccionar automáticamente la versión de ese nodo en: Cambiar automáticamente a la versión correcta del Nodo según el proyecto
Probado con NVM 0.33.11.
Hay otra forma más simple de hacer esto:
npm install Node@8
(guarda el Nodo 8 como dependencia en package.json)Esto funciona porque node
es solo un paquete que envía el nodo como paquete binario. Solo incluye como node_module / .bin, lo que significa que solo hace que el nodo esté disponible para empaquetar scripts. No es la carcasa principal.
Vea la discusión en Twitter aquí: https://twitter.com/housecor/status/962347301456015360
./node node-sass
lugar de solo node-sass
. No estoy seguro si es igual para todos los archivos .bin.
Un ejemplo de caso de prueba Mocha:
describe('Check version of node', function () {
it('Should test version assert', async function () {
var version = process.version;
var check = parseFloat(version.substr(1,version.length)) > 12.0;
console.log("version: "+version);
console.log("check: " +check);
assert.equal(check, true);
});});