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-semverist 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.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'
}
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."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 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.
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