From 4f47d0d3fa94a02d16b1162dffdc4332a4466c0e Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Sat, 18 Aug 2018 21:31:43 +0200 Subject: [PATCH] warn if node.js runtime version does not satisfy the version requested by a plugin --- lib/base.js | 16 +++++++++++++++- package.json | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/base.js b/lib/base.js index 996e840..26b168e 100644 --- a/lib/base.js +++ b/lib/base.js @@ -3,7 +3,8 @@ var util = require('util'), _ = require('lodash'), prequire = require('parent-require'), uuid = require('uuid').v4, - ViewModel = require('./viewmodel'); + ViewModel = require('./viewmodel'), + semver = require('semver'); /** * Repository constructor @@ -158,11 +159,24 @@ Repository.ViewModel = ViewModel; Repository.use = function (toRequire) { var required; + var prequired = false; try { required = require(toRequire); } catch (e) { // workaround when `npm link`'ed for development required = prequire(toRequire); + prequired = true; + } + if (toRequire.indexOf('.') !== 0 && toRequire.indexOf('/') !== 0 && toRequire.split('/').length < 2) { + try { + var requiredPkgJson; + requiredPkgJson = prequired ? prequire(toRequire + '/package.json') : require(toRequire + '/package.json'); + if (requiredPkgJson && requiredPkgJson.engines && requiredPkgJson.engines.node && + !semver.satisfies(process.version, requiredPkgJson.engines.node)) { + console.error('Your node.js runtime version (' + process.version + ') does not satisfy the version requested by ' + toRequire + ' (' + requiredPkgJson.engines.node + ')!'); + process.exit(1); + } + } catch (e) {} } return required; }; diff --git a/package.json b/package.json index 7432f9b..fb3404e 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "jsondate": "0.0.1", "lodash": "4.17.10", "parent-require": "1.0.0", + "semver": "5.5.1", "sift": "5.0.0", "tolerance": "1.0.0", "uuid": "3.1.0"