Yazmakta olduğum bir kitaplıkta çalışan mevcut düğüm sürümüne programlı olarak erişmem gerekiyor. Bunu belgelerde bulamıyorum.
Yazmakta olduğum bir kitaplıkta çalışan mevcut düğüm sürümüne programlı olarak erişmem gerekiyor. Bunu belgelerde bulamıyorum.
Yanıtlar:
Process.version özelliğine bakmayı deneyin .
process.version.match(/^v(\d+\.\d+)/)[1]
eğer process.versionolduğunu 'v0.11.5' yazıp olsun 0.11.
node-semverdaha iyi bir çözüm
Karşılaştırmak için semver kullanın process.version:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
Aslında process.versions, farklı düğüm bileşenleri için birçok sürüm sağlayan nesneyi kullanmak daha iyi olacaktır . Misal:
{
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'
}
Yalnızca ana sürümü kontrol etmeniz gerekiyorsa, bu hızlı ve kirli parçacığı kullanabilirsiniz:
const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
if (NODE_MAJOR_VERSION < 12) {
throw new Error('Requires Node 12 (or higher)');
}
Notlar:
process.versions.nodeprocess.versionsürümün bir lider ile başlayıp başlamadığı konusunda endişelenmenize gerek olmadığından, çalışmaktan daha kolaydır v."0".Kod tabanımda benzer bir sorun yaşadım. Sunucumu çalışma zamanında çalıştırmak için kullanacağım mevcut NodeJs sürümünü öğrenmek istedim. Bunun için, npm run startbetik kullanarak Sunucuya başlamadan önce çalıştırılabilecek bir kod yazdım . Bu sorudan faydalı olacak şekilde aşağıdaki kod bulundu .
'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}.`);
}
Package.json şuna benziyor:
{
"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"
}
}
Çalışma yapın npm installEğer çalıştırmadan önce komutunu npm run startprojenizi çalıştırmak için komut.
Node js çalıştıran ortamlara erişirseniz, 2 ana giriş vardır: (bir simeple, bir detay)
process.version sana vereceğim:'v10.16.0'
process.versions sana vereceğim:{ 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' }
@alsotang'ın önerdiği gibi bu bütünü yazmak yerine
Number(process.version.match(/^v(\d+\.\d+)/)[1])
(bunun kötü bir çözüm olduğunu söylemiyorum).
basitçe yazabilirsin
parseFloat(process.versions.node); bu versiyonlar (çoğul) değil versiyonu
aynı veya (benzer) sonucu almak için ve okunması kolay