Necesito acceder mediante programación a la versión del nodo actual que se ejecuta en una biblioteca que estoy escribiendo. Parece que no puedo encontrar esto en los documentos.
Necesito acceder mediante programación a la versión del nodo actual que se ejecuta en una biblioteca que estoy escribiendo. Parece que no puedo encontrar esto en los documentos.
Respuestas:
Intenta mirar la propiedad process.version .
process.version.match(/^v(\d+\.\d+)/)[1]
si process.versiones 'v0.11.5', obtenga 0.11.
node-semveres una mejor
Use semver para comparar process.version:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
En realidad, sería mejor usar un process.versionsobjeto que proporcione muchas versiones para los diferentes componentes del nodo. Ejemplo:
{
http_parser: '2.5.2',
node: '4.4.3',
v8: '4.5.103.35',
uv: '1.8.0',
zlib: '1.2.8',
ares: '1.10.1-DEV',
icu: '56.1',
modules: '46',
openssl: '1.0.2g'
}
Si solo necesita verificar la versión principal, puede usar este fragmento rápido y sucio:
const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
if (NODE_MAJOR_VERSION < 12) {
throw new Error('Requires Node 12 (or higher)');
}
Notas:
process.versions.nodees más fácil trabajar con él que process.version, ya que no tiene que preocuparse por si la versión comienza con un líderv ."0".Tuve el problema similar con mi base de código. Quería saber la versión actual de NodeJs que voy a usar para ejecutar mi servidor en tiempo de ejecución. Para eso, escribí un código que se puede ejecutar antes de iniciar el Servidor usando un npm run startscript. Encontrado debajo del código útil de esta pregunta .
'use strict';
const semver = require('semver');
const engines = require('./package').engines;
const nodeVersion = engines.node;
// Compare installed NodeJs version with required NodeJs version.
if (!semver.satisfies(process.version, nodeVersion)) {
console.log(`NodeJS Version Check: Required node version ${nodeVersion} NOT SATISFIED with current version ${process.version}.`);
process.exit(1);
} else {
console.log(`NodeJS Version Check: Required node version ${nodeVersion} SATISFIED with current version ${process.version}.`);
}
Mi package.json se ve así:
{
"name": "echo-server",
"version": "1.0.0",
"engines": {
"node": "8.5.0",
"npm": "5.3.0"
},
"description": "",
"main": "index.js",
"scripts": {
"check-version" : "node checkVersion.js",
"start-server" : "node app.js"
"start" : "npm run check-version && npm run start-server",
"test": "npm run check-version && echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"bluebird": "^3.5.1",
"express": "^4.16.3",
"good-guy-http": "^1.10.3",
"semver": "^5.5.0"
}
}
Ejecute el npm installcomando antes de ejecutar el npm run startcomando para ejecutar su proyecto.
Si accede a los entornos en ejecución del nodo js, hay 2 entradas principales: (un simeple, un detalle)
process.version Te regalaré:'v10.16.0'
process.versions Te regalaré:{ http_parser: '2.8.0',
node: '10.16.0',
v8: '6.8.275.32-node.52',
uv: '1.28.0',
zlib: '1.2.11',
brotli: '1.0.7',
ares: '1.15.0',
modules: '64',
nghttp2: '1.34.0',
napi: '4',
openssl: '1.1.1b',
icu: '64.2',
unicode: '12.1',
cldr: '35.1',
tz: '2019a' }
También en lugar de escribir todo esto como lo sugiere @alsotang
Number(process.version.match(/^v(\d+\.\d+)/)[1])
(No digo que esta sea una mala solución).
simplemente puedes escribir
parseFloat(process.versions.node); es versiones (plural) no versión
para obtener el mismo resultado (o similar) y es fácil de leer