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
+}