Câu trả lời:
Hãy thử nhìn vào thuộc tính process.version .
process.version.match(/^v(\d+\.\d+)/)[1]
nếu process.versionlà 'v0.11.5', thì lấy 0.11.
node-semverlà một cách giải quyết tốt hơn
Sử dụng semver để so sánh process.version:
const semver = require('semver');
if (semver.gte(process.version, '0.12.18')) {
...
}
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'
}
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."0".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.
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' }
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