Kiểm tra phiên bản nút hiện tại


131

Tôi cần lập trình truy cập phiên bản nút hiện tại đang chạy trong thư viện tôi đang viết. Dường như không thể tìm thấy điều này trong các tài liệu.

Câu trả lời:



29

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

nếu process.versionlà 'v0.11.5', thì lấy 0.11.


6
Các nút-semver thư viện có thể rất hữu ích cho việc này.
beeman

2
ồ vâng, node-semverlà một cách giải quyết tốt hơn
alsotang

2
Đột nhiên, cách này 0.10 trở thành 0.1> process.version 'v0.10.40'> Số (process.version.match (/ ^ v (\ d + \. \ D +) /) [1]) 0.1
Michael Plakhov

KHÔNG SỬ DỤNG NÀY vì lý do được Michael Plakhov nêu ra: sử dụng số thập phân, 0.10 == 0.1
caesarsol

26

Sử dụng semver để so sánh process.version:

const semver = require('semver');

if (semver.gte(process.version, '0.12.18')) {
  ...
}

23

Trên thực tế, sẽ tốt hơn nếu sử dụng process.versionsđối tượng cung cấp nhiều phiên bản cho các thành phần nút khác nhau. Thí dụ:

{
  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

Nếu bạn chỉ cần kiểm tra phiên bản chính, bạn có thể sử dụng đoạn mã nhanh và bẩn này:

const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
if (NODE_MAJOR_VERSION < 12) {
  throw new Error('Requires Node 12 (or higher)');
}

Ghi chú:

  • process.versions.nodedễ làm việc hơn process.version, vì bạn không phải lo lắng về việc liệu phiên bản có bắt đầu với hàng đầu hay không v.
  • Nếu bạn vẫn cần phân biệt giữa các phiên bản cổ (ví dụ: 0.10 và 0.12), điều này sẽ không hoạt động, vì tất cả chúng sẽ được coi là phiên bản "0".

2

Tôi đã có vấn đề tương tự với cơ sở mã của tôi. Tôi muốn biết phiên bản NodeJ hiện tại mà tôi sẽ sử dụng để chạy máy chủ của mình khi chạy. Vì thế, tôi đã viết một mã có thể chạy trước khi khởi động Máy chủ bằng cách sử dụng npm run starttập lệnh. Tìm thấy mã dưới đây hữu ích từ câu hỏi này .

'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}.`);
}

Gói.json của tôi trông như thế này:

{
  "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"
  }
}

Đừng chạy npm installlệnh trước khi bạn chạy npm run startlệnh để chạy dự án của bạn.


2

Nếu bạn truy cập vào môi trường chạy nút js, có 2 mục chính: (một simeple, một chi tiết)

  • process.version sẽ cung cấp cho bạn:

'v10.16.0'

  • process.versions sẽ cung cấp cho bạn:
{ 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

cũng thay vì viết toàn bộ như đề xuất của @alsotang

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

(không nói đây là một giải pháp tồi).

bạn chỉ có thể viết

parseFloat(process.versions.node); nó là phiên bản (số nhiều) không phải phiên bản

để có được kết quả tương tự hoặc (tương tự) và dễ đọc


KHÔNG SỬ DỤNG PHƯƠNG PHÁP NÀY: như đã nói trong các bình luận khác, phân tích cú pháp theo cách này làm cho phiên bản đọc sai: 9.10 == 9.1
caesarsol
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.