Überprüfen Sie die aktuelle Knotenversion


130

Ich muss programmgesteuert auf die aktuelle Knotenversion zugreifen, die in einer Bibliothek ausgeführt wird, die ich schreibe. Kann nicht scheinen, dies in den Dokumenten zu finden.

Antworten:



29

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

Wenn process.version'v0.11.5' ist, dann get 0.11.


6
Die Node-Semver- Bibliothek kann hierfür sehr nützlich sein.
Beeman

2
oh ja, node-semverist eine bessere sollution
alsotang

2
Auf diese Weise wird 0.10 plötzlich zu 0.1> process.version 'v0.10.40'> Number (process.version.match (/ ^ v (\ d + \. \ D +) /) [1]) 0.1
Michael Plakhov

VERWENDEN SIE DIESES NICHT aus dem von Michael Plakhov dargelegten Grund: Verwenden Sie Dezimalzahlen, 0,10 == 0,1
Caesarsol

26

Verwenden Sie semver zum Vergleichen process.version:

const semver = require('semver');

if (semver.gte(process.version, '0.12.18')) {
  ...
}

23

Eigentlich wäre es besser, ein process.versionsObjekt zu verwenden , das viele Versionen für die verschiedenen Knotenkomponenten bereitstellt. Beispiel:

{
  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

Wenn Sie nur nach der Hauptversion suchen müssen, können Sie dieses schnelle und schmutzige Snippet verwenden:

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

Anmerkungen:

  • process.versions.nodeist einfacher zu bearbeiten als process.version, da Sie sich keine Gedanken darüber machen müssen, ob die Version mit einem führenden beginnt v.
  • Wenn Sie immer noch zwischen alten Versionen unterscheiden müssen (z. B. 0.10 und 0.12), funktioniert dies nicht, da alle als Version betrachtet werden "0".

2

Ich hatte ein ähnliches Problem mit meiner Codebasis. Ich wollte die aktuelle NodeJs-Version kennen, mit der ich meinen Server zur Laufzeit ausführen werde. Dafür habe ich einen Code geschrieben, der ausgeführt werden kann, bevor der Server mit einem npm run startSkript gestartet wird. Gefunden unten Code hilfreich von dieser Frage .

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

Meine package.json sieht folgendermaßen aus:

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

Lauf doch npm install Befehl aus, bevor Sie den npm run startBefehl ausführen, um Ihr Projekt auszuführen.


2

Wenn Sie auf die laufenden Umgebungen des Knotens j zugreifen, gibt es zwei Haupteinträge: (ein Simeple, ein Detail)

  • process.version werde dir geben:

'v10.16.0'

  • process.versions werde dir geben:
{ 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

auch anstatt das Ganze zu schreiben, wie von @alsotang vorgeschlagen

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

(nicht zu sagen, dass dies eine schlechte Lösung ist).

du kannst einfach schreiben

parseFloat(process.versions.node); Es sind Versionen (Plural), keine Version

gleiches oder (ähnliches) Ergebnis zu erhalten und ist leicht zu lesen


VERWENDEN SIE DIESE METHODE NICHT: Wie in anderen Kommentaren erwähnt, wird beim Parsen auf diese Weise die Version falsch gelesen: 9.10 == 9.1
caesarsol
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.