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.
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:
Essayez de regarder la propriété process.version .
process.version.match(/^v(\d+\.\d+)/)[1]
si process.versionest 'v0.11.5', alors obtenez 0.11.
node-semverest une meilleure solution
Utilisez semver pour comparer process.version:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
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'
}
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."0".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.
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' }
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