Skip to content

Commit

Permalink
Improve check for used JS features (#544)
Browse files Browse the repository at this point in the history
* Improve check for used JS features

- Moved check to ./lib/environment.js so it can be re-used in
  different modules
- Uses the vm module to check for the spread operator.
- Added `process.exit(1)` when the node environment is invalid.
  • Loading branch information
andreban authored and paulirish committed Aug 1, 2016
1 parent b438789 commit 4f43470
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 14 deletions.
12 changes: 6 additions & 6 deletions lighthouse-cli/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@

'use strict';

const environment = require('../lighthouse-core/lib/environment.js');
if (!environment.checkNodeCompatibility()) {
console.warn('Compatibility error', 'Lighthouse requires node 5+ or 4 with --harmony');
process.exit(1);
}

const yargs = require('yargs');
const semver = require('semver');
const Printer = require('./printer');
const lighthouse = require('../lighthouse-core');
const log = require('../lighthouse-core/lib/log');

// node 5.x required due to use of ES2015 features, like spread operator
if (semver.lt(process.version, '5.0.0')) {
console.warn('Compatibility error', 'Lighthouse requires node 5+ or 4 with --harmony');
}

const cli = yargs
.help('help')
.version()
Expand Down
16 changes: 8 additions & 8 deletions lighthouse-core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@

'use strict';

const semver = require('semver');
const environment = require('../lighthouse-core/lib/environment');
if (!environment.checkNodeCompatibility()) {
console.warn('Compatibility error', 'Lighthouse requires node 5+ or 4 with --harmony');
process.exit(1);
}

const Runner = require('./runner');
const log = require('./lib/log.js');
const ChromeProtocol = require('./gather/drivers/cri.js');
Expand All @@ -38,17 +43,14 @@ const Config = require('./config');
*
*/

// node 5.x required due to use of ES2015 features, like spread operator
if (semver.lt(process.version, '5.0.0')) {
log.warn('Compatibility error', 'Lighthouse requires node 5+ or 4 with --harmony');
}

module.exports = function(url, flags, configJSON) {
return new Promise((resolve, reject) => {
if (!url) {
return reject(new Error('Lighthouse requires a URL'));
}

flags = flags || {};

// set logging preferences, assume quiet
flags.logLevel = flags.logLevel || 'error';
log.setLevel(flags.logLevel);
Expand All @@ -59,8 +61,6 @@ module.exports = function(url, flags, configJSON) {
log.warn('Lighthouse', 'Performance stats will be skewed redirecting from HTTP to HTTPS.');
}

flags = flags || {};

// Use ConfigParser to generate a valid config file
const config = new Config(configJSON, flags.auditWhitelist);

Expand Down
39 changes: 39 additions & 0 deletions lighthouse-core/lib/environment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* @license
* Copyright 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';

const semver = require('semver');
const vm = require('vm');

function checkNodeCompatibility() {
// node 5.x required due to use of ES2015 features, like spread operator
if (semver.gte(process.version, '5.0.0')) {
return true;
}

try {
// Test for the availability of the spread operator.
new vm.Script('Math.max(...[ 5, 10 ])').runInThisContext();
return true;
} catch (e) {
return false;
}
}

module.exports = {
checkNodeCompatibility: checkNodeCompatibility
};

0 comments on commit 4f43470

Please sign in to comment.