Verifique la versión actual del nodo


131

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:



29

process.version.match(/^v(\d+\.\d+)/)[1]

si process.versiones 'v0.11.5', obtenga 0.11.


66
La biblioteca de nodo-semver puede ser muy útil para esto.
— beeman

2
oh sí, node-semveres una mejor
— solución

2
De repente, de esta manera 0.10 se convierte en 0.1> process.version 'v0.10.40'> Number (process.version.match (/ ^ v (\ d + \. \ D +) /) [1]) 0.1
— Michael Plakhov

NO USE ESTO por la razón descrita por Michael Plakhov: usando números decimales, 0.10 == 0.1
— caesarsol


23

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'
}

5

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 .
  • Si aún necesita distinguir entre versiones antiguas (p. Ej., 0.10 y 0.12), esto no funcionará, ya que todas se considerarán versiones "0".

2

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.


2

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' }

0

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


NO USE ESTE MÉTODO: como se dijo en otros comentarios, analizar de esta manera hace que la versión se lea de manera incorrecta: 9.10 == 9.1
— caesarsol
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.