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.
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:
Versuchen Sie, die Eigenschaft process.version zu überprüfen .
process.version.match(/^v(\d+\.\d+)/)[1]
Wenn process.version
'v0.11.5' ist, dann get 0.11
.
node-semver
ist eine bessere sollution
Verwenden Sie semver zum Vergleichen process.version
:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
Eigentlich wäre es besser, ein process.versions
Objekt 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'
}
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.node
ist 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
."0"
.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 start
Skript 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 start
Befehl ausführen, um Ihr Projekt auszuführen.
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' }
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