Vérifier la version actuelle du nœud


132

J'ai besoin d'accéder par programme à la version actuelle du nœud en cours d'exécution dans une bibliothèque que j'écris. Impossible de trouver cela dans les documents.

Réponses:



29

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

si process.versionest 'v0.11.5', alors obtenez 0.11.


6
La bibliothèque node-semver peut être très utile pour cela.
— beeman

2
oh oui, node-semverest une meilleure solution
— alsotang

2
Soudain, de cette façon, 0,10 devient 0,1> process.version 'v0.10.40'> Number (process.version.match (/ ^ v (\ d + \. \ D +) /) [1]) 0,1
— Michael Plakhov

NE PAS UTILISER CECI pour la raison indiquée par Michael Plakhov: en utilisant des nombres décimaux, 0,10 == 0,1
— césarsol


23

En fait, il serait préférable d'utiliser un process.versionsobjet qui fournit de nombreuses versions pour les différents composants du nœud. Exemple:

{
  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 vous ne devez vérifier que la version principale, vous pouvez utiliser cet extrait de code rapide et sale:

const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
if (NODE_MAJOR_VERSION < 12) {
  throw new Error('Requires Node 12 (or higher)');
}

Remarques:

  • process.versions.nodeest plus facile à process.versionutiliser que , car vous n'avez pas à vous soucier de savoir si la version commence par un début v.
  • Si vous avez encore besoin de faire la distinction entre les anciennes versions (par exemple, 0.10 et 0.12), cela ne fonctionnera pas, car elles seront toutes considérées comme des versions "0".

2

J'ai eu le même problème avec ma base de code. Je voulais connaître la version actuelle de NodeJs que je vais utiliser pour exécuter mon serveur au moment de l'exécution. Pour cela, j'ai écrit un code qui peut être exécuté avant de démarrer le serveur en utilisant un npm run startscript. Trouvé ci-dessous le code utile de cette question .

'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}.`);
}

Mon package.json ressemble à ceci:

{
  "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"
  }
}

Exécutez la npm installcommande avant d'exécuter la npm run startcommande pour exécuter votre projet.


2

Si vous accédez aux environnements d'exécution de node js, il y a 2 entrées principales: (une seule, un détail)

  • process.version te donnera:

'v10.16.0'

  • process.versions te donnera:
{ 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

aussi au lieu d'écrire tout cela comme suggéré par @alsotang

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

(ne pas dire que c'est une mauvaise solution).

tu peux simplement écrire

parseFloat(process.versions.node); ce sont des versions (pluriel) pas une version

pour obtenir un résultat identique ou (similaire) et est facile à lire


N'UTILISEZ PAS CETTE MÉTHODE: comme indiqué dans d'autres commentaires, l'analyse syntaxique de cette manière rend la version mal lue: 9.10 == 9.1
— caesarsol
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.