@samitouri / QOS-React-2 / commits / ec9b866bc0

Check for compatible node,npm versions on install

This is only for building React and doesnn't apply to production installs.

Paul O’Shannessy committed Aug 18, 2015 at 18:05 UTC ec9b866bc0fa4118f0b3750589e26ed851ef97bd
2 files changed +46 -2
package.json
+5 -2
@@ -32,14 +32,16 @@
32 "optimist": "^0.6.1",
33 "platform": "^1.1.0",
34 "run-sequence": "^1.1.0",
35 + "semver": "^5.0.1",
36 "through2": "^2.0.0",
37 "tmp": "~0.0.18",
38 "typescript": "~1.4.0",
39 "uglify-js": "^2.4.23",
40 "uglifyify": "^3.0.1"
41 },
41 - "engines": {
42 - "node": ">=0.10.0"
42 + "devEngines": {
43 + "node": "0.10.x",
44 + "npm": "2.x"
45 },
46 "commonerConfig": {
47 "version": 7
@@ -48,6 +50,7 @@
50 "build": "grunt build",
51 "linc": "git diff --name-only --diff-filter=ACMRTUB `git merge-base HEAD master` | grep '\\.js$' | xargs eslint --",
52 "lint": "grunt lint",
53 + "postinstall": "node scripts/check-dev-engines.js",
54 "test": "NODE_ENV=test jest"
55 },
56 "jest": {
scripts/check-dev-engines.js new
+41
@@ -0,0 +1,41 @@
1 +'use strict';
2 +
3 +var devEngines = require('../package').devEngines;
4 +
5 +var assert = require('assert');
6 +var exec = require('child_process').exec;
7 +var semver = require('semver');
8 +var f = require('util').format;
9 +
10 +if (devEngines.node !== undefined) {
11 + // First check that devEngines are valid semver
12 + assert(
13 + semver.validRange(devEngines.node),
14 + f('devEngines.node (%s) is not a valid semver range', devEngines.node)
15 + );
16 + // Then actually check that our version satisfies
17 + var nodeVersion = process.versions.node;
18 + assert(
19 + semver.satisfies(nodeVersion, devEngines.node),
20 + f('Current node version is not supported for development, expected "%s" to satisfy "%s".', nodeVersion, devEngines.node)
21 + );
22 +}
23 +
24 +if (devEngines.npm !== undefined) {
25 + // First check that devEngines are valid semver
26 + assert(
27 + semver.validRange(devEngines.npm),
28 + f('devEngines.npm (%s) is not a valid semver range', devEngines.npm)
29 + );
30 +
31 + // Then actually check that our version satisfies
32 + exec('npm --version', function(err, stdout, stderr) {
33 + assert(err === null, f('Failed to get npm version... %s'), stderr);
34 +
35 + var npmVersion = stdout.trim();
36 + assert(
37 + semver.satisfies(npmVersion, devEngines.npm),
38 + f('Current npm version is not supported for development, expected "%s" to satisfy "%s".', npmVersion, devEngines.npm)
39 + );
40 + });
41 +}