NodeJS Engine Version Checker
JS
S
JavaScriptSimple but efficient engines version checker for any node project. Warning: will terminate the node process with a non zero code. https://semver.org/ X.Y.Z <major.minor.patch> Semver specs: 0.0.1 is a development API 1.0.0 is the Public API
1// package.json
2 "engines": {
3 "node": ">= 10.0.0",
4 "npm": ">= 5.0.0"
5 }
6
7// /lib/version-checker.js
8'use strict'
9
10const semver = require('semver');
11const packageRequirements = require('../package.json');
12const { execSync } = require('child_process');
13const logger = require('./logger');
14
15/* Spawns a shell then executes the command within that shell, buffering any generated output
16 Note: will block the Node.js event loop !!!
17*/
18function exec (cmd) {
19 return execSync(cmd).toString().trim()
20}
21
22// Mininum versions array
23const minimumRequirements = [
24 {
25 name: 'node',
26 currentVersion: semver.clean(process.version),
27 minimumVersion: packageRequirements.engines.node
28 },
29 {
30 name: 'npm',
31 currentVersion: exec('npm --version'),
32 minimumVersion: packageRequirements.engines.npm
33 }
34]
35
36function checkVersions(){
37 const warnings = []
38 minimumRequirements.forEach(requirement => {
39 if (!semver.satisfies(requirement.currentVersion, requirement.minimumVersion)) {
40 warnings.push(`${requirement.name}: ${requirement.currentVersion} should be: ${requirement.minimumVersion}`
41 )
42 }
43 });
44 return warnings;
45}
46
47module.exports = function(cb) {
48 const warnings = checkVersions();
49 if (warnings.length > 0) {
50 warnings.forEach(warning => {
51 logger.log(warning)
52 });
53 cb(warnings)
54 } else {
55 logger.log('Node and NPM versions checks passed.');
56 cb();
57 }
58}
59
60// app.js
61'use strict'
62const versionChecker = require('./lib/version-checker');
63// Initialization Middleware
64// -----------------------------
65versionChecker((err, result) => {
66 if(err) {
67 // if(err) { throw err; }
68 // Force process termination with non-zero signal
69 process.exit(1);
70 } else {
71 // initialisation middleware goes here
72 }
73});
74Created on 2/4/2018