Skip to content

Commit 0f963bb

Browse files
committed
Merge pull request facebook#4654 from zpao/checkversionsoninstall
Check for compatible node,npm versions on install
2 parents 61962c1 + ec9b866 commit 0f963bb

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,16 @@
3232
"optimist": "^0.6.1",
3333
"platform": "^1.1.0",
3434
"run-sequence": "^1.1.0",
35+
"semver": "^5.0.1",
3536
"through2": "^2.0.0",
3637
"tmp": "~0.0.18",
3738
"typescript": "~1.4.0",
3839
"uglify-js": "^2.4.23",
3940
"uglifyify": "^3.0.1"
4041
},
41-
"engines": {
42-
"node": ">=0.10.0"
42+
"devEngines": {
43+
"node": "0.10.x",
44+
"npm": "2.x"
4345
},
4446
"commonerConfig": {
4547
"version": 7
@@ -48,6 +50,7 @@
4850
"build": "grunt build",
4951
"linc": "git diff --name-only --diff-filter=ACMRTUB `git merge-base HEAD master` | grep '\\.js$' | xargs eslint --",
5052
"lint": "grunt lint",
53+
"postinstall": "node scripts/check-dev-engines.js",
5154
"test": "NODE_ENV=test jest"
5255
},
5356
"jest": {

scripts/check-dev-engines.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

0 commit comments

Comments
 (0)