Check for current Node Version

node.js

node.js Problem Overview


I need to programmatically access the current node version running in a library I am writing. Can't seem to find this in the docs.

node.js Solutions


Solution 1 - node.js

Try to look at process.version property.

Solution 2 - node.js

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

if process.version is 'v0.11.5', then get 0.11 .

Solution 3 - node.js

Actually it would be better to use process.versions object which provides a lot of versions for the different node components. Example:

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

Solution 4 - node.js

Use semver to compare process.version:

const semver = require('semver');

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

Solution 5 - node.js

If you need to only check for the major version, you can use this quick-and-dirty snippet:

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

Notes:

  • process.versions.node is easier to work with than process.version, as you do not have to worry about whether the version starts with a leading v.
  • If you still need to distinguish between ancient versions (e.g., 0.10 and 0.12), this will not work, as they will all be considered version "0".

Solution 6 - node.js

I refined alsotang's answer a bit to compare versions:

const m = process.version.match(/(\d+)\.(\d+)\.(\d+)/);
const [major, minor, patch] = m.slice(1).map(_ => parseInt(_));

To perform an assertion, do it like this:

if (major >= 13 || (major >= 12 && minor >= 12)) {
    console.log("NodeJS is at least v12.12.0. It is safe to use fs.opendir!");
}

This can be shortened to a one-liner to use in bash:

NODE_VERSION=$(node -e "const v = process.version.match(/(\\d+)\.(\\d+)\.(\\d+)/).slice(1).map(_ => parseInt(_)); console.log(v[0] >= 13 || (v[0] >= 12 && v[1] >= 12))")
if $NODE_VERSION -eq "true" ;
then
    echo "NodeJS is at least v12.12.0."
fi

or PowerShell:

$nodeVersion = $(node -e "const v = process.version.match(/(\d+)\.(\d+)\.(\d+)/).slice(1).map(_ => parseInt(_)); console.log(v[0] >= 13 || (v[0] >= 12 && v[1] >= 12))")
if ($nodeVersion -eq "true") {
    Write-Host "NodeJS is at least v12.12.0."
}

Solution 7 - node.js

I had the similar issue with my codebase. I wanted to know the current NodeJs version I am going to use to run my server at runtime. For that, I wrote a code which can be run before starting the Server using npm run start script. Found below code helpful from this question.

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

My package.json looks like this:

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

Do run npm install command before you run npm run start command to run your project.

Solution 8 - node.js

If you access node js running environments, there are 2 main entries: (one simeple, one detail)

  • process.version will give you:

'v10.16.0'

  • process.versions will give you:
{ 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' }

Solution 9 - node.js

also instead of writing this whole as suggested by @alsotang

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

(not saying this is a bad solution).

you can simply write

parseFloat(process.versions.node); it is versions (plural) not version

to get same or (similar) result and is easy to read

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHarborhofferView Question on Stackoverflow
Solution 1 - node.jsyojimbo87View Answer on Stackoverflow
Solution 2 - node.jsalsotangView Answer on Stackoverflow
Solution 3 - node.jsAndrea BaccegaView Answer on Stackoverflow
Solution 4 - node.jsChristian d'HeureuseView Answer on Stackoverflow
Solution 5 - node.jsPhilipp ClaßenView Answer on Stackoverflow
Solution 6 - node.jsfelixhView Answer on Stackoverflow
Solution 7 - node.jsS.MishraView Answer on Stackoverflow
Solution 8 - node.jsXinView Answer on Stackoverflow
Solution 9 - node.jssanjeevView Answer on Stackoverflow