Перевірте поточну версію вузла


131

Мені потрібно програмно отримати доступ до поточної версії вузла, що працює в бібліотеці, про яку я пишу. Не можу знайти це в документах.

Відповіді:



29

process.version.match(/^v(\d+\.\d+)/)[1]

якщо process.version'v0.11.5', то отримайте 0.11.


6
Бібліотека вузлів-северів може бути дуже корисною для цього.
— beeman

2
о так, node-semverкраще
— заспокоєння

2
Раптом таким чином 0.10 стає 0,1> process.version 'v0.10.40'> Число (process.version.match (/ ^ v (\ d + \. \ D +) /) [1]) 0,1
— Михайло Плахов

НЕ ВИКОРИСТОВУЙТЕ ЦЕ з тієї причини, яку виклав Михайло Плахов: використовуючи десяткові числа, 0,10 == 0,1
— цезарсол


23

Насправді, було б краще використовувати 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'
}

5

Якщо вам потрібно перевірити лише основну версію, ви можете скористатися цим швидким і брудним фрагментом:

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,10 та 0,12), це не вийде, оскільки всі вони будуть вважатися версією "0".

2

У мене була схожа проблема з моєю базою кодів. Мені хотілося знати поточну версію 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команди для запуску проекту.


2

Якщо ви отримуєте доступ до вузла 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' }

0

також замість того, щоб писати все це, як запропонував @alsotang

Number(process.version.match(/^v(\d+\.\d+)/)[1])

(не кажучи, що це погане рішення).

можна просто написати

parseFloat(process.versions.node); це версії (множини), а не версія

щоб отримати однаковий або (подібний) результат, його легко читати


НЕ ВИКОРИСТОВУЙТЕ ЦІЙ МЕТОД: як сказано в інших коментарях, розбір таким чином робить версію прочитаною невірним чином: 9.10 == 9.1
— цезарсол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.