Мені потрібно програмно отримати доступ до поточної версії вузла, що працює в бібліотеці, про яку я пишу. Не можу знайти це в документах.
Мені потрібно програмно отримати доступ до поточної версії вузла, що працює в бібліотеці, про яку я пишу. Не можу знайти це в документах.
Відповіді:
Спробуйте переглянути властивість process.version .
process.version.match(/^v(\d+\.\d+)/)[1]
якщо process.version'v0.11.5', то отримайте 0.11.
node-semverкраще
Використовуйте semver для порівняння process.version:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
Насправді, було б краще використовувати process.versionsоб'єкт, який надає безліч версій для різних компонентів вузла. Приклад:
{
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'
}
Якщо вам потрібно перевірити лише основну версію, ви можете скористатися цим швидким і брудним фрагментом:
const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
if (NODE_MAJOR_VERSION < 12) {
throw new Error('Requires Node 12 (or higher)');
}
Примітки:
process.versions.nodeз цим легше працювати process.version, оскільки вам не доведеться турбуватися про те, чи починається версія з ведучої v."0".У мене була схожа проблема з моєю базою кодів. Мені хотілося знати поточну версію NodeJs, яку я буду використовувати для запуску свого сервера під час виконання. Для цього я написав код, який можна запустити перед запуском Сервера за допомогою npm run startскрипту. Нижче наведений код, корисний для цього питання .
'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 виглядає так:
{
"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"
}
}
Виконайте npm installкоманду run перед запуском npm run startкоманди для запуску проекту.
Якщо ви отримуєте доступ до вузла js, що працює в середовищі, є 2 основні записи: (один симпл, одна деталь)
process.version дасть вам:'v10.16.0'
process.versions дасть вам:{ 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
Number(process.version.match(/^v(\d+\.\d+)/)[1])
(не кажучи, що це погане рішення).
можна просто написати
parseFloat(process.versions.node); це версії (множини), а не версія
щоб отримати однаковий або (подібний) результат, його легко читати