harmonious
Version:
Ensure that node is run as the correct version, and uses --harmony, if needed
76 lines (64 loc) • 2.3 kB
JavaScript
var log = require('npmlog');
var semver = require('semver');
var spawn = require('child_process').spawn;
var path = require('path');
var pkg = require(path.resolve(path.dirname(module.parent.filename), 'package'));
log.heading = pkg.name;
log.level = process.env.LOG_LEVEL || 'info';
module.exports = function (_id) {
var id = require.resolve(path.resolve(path.dirname(module.parent.filename), _id));
var child;
if (!~process.execArgv.indexOf('--harmony') && semver.lt(process.version, '0.12.0')) {
log.verbose('harmonious', 'spawning.', 'harmony required for', process.version);
log.verbose('harmonious', pkg.engines.node);
log.verbose('harmonious', process.version);
if (!pkg.engines || !pkg.engines.node) {
log.verbose('harmonious', 'no valid pkg.engines.node found');
child = spawn('n', [ 'latest' ]);
child.on('exit', function (code, signal) {
reSpawn(id);
});
}
else if (semver.satisfies(process.version, pkg.engines.node)) {
log.verbose('harmonious', 'version already satisfied');
reSpawn(id);
}
else if (semver.gtr('0.12.0', pkg.engines.node) && semver.satisfies('0.11.13', pkg.engines.node)) {
child = spawn('n', [ '0.11' ]);
child.on('exit', function (code, signal) {
reSpawn(id);
});
}
else if (semver.gtr('0.11.0', pkg.engines.node) && semver.satisfies('0.10.29', pkg.engines.node)) {
child = spawn('n', [ '0.10' ]);
child.on('exit', function (code, signal) {
reSpawn(id);
});
}
else if (semver.gtr('0.10.0', pkg.engines.node) && semver.satisfies('0.8.27', pkg.engines.node)) {
child = spawn('n', [ '0.8' ]);
child.on('exit', function (code, signal) {
reSpawn(id);
});
}
else if (semver.gtr('0.8.6', pkg.engines.node)) {
log.error('range', 'I\'m not going to load anything older than 0.8.6. sorry');
}
else {
// default case: load latest
child = spawn('n', [ 'latest' ]);
child.on('exit', function (code, signal) {
reSpawn(id);
});
}
}
else {
reSpawn(id);
}
};
function reSpawn (id) {
var child = spawn(process.execPath, [ "--harmony", id ].concat(process.argv.slice(2)), {
cwd: process.cwd(),
stdio: 'inherit'
});
}