diff --git a/lib/module.js b/lib/module.js index eba3de81713fe8..5afb5b6200d73d 100644 --- a/lib/module.js +++ b/lib/module.js @@ -2,7 +2,7 @@ const NativeModule = require('native_module'); const util = require('util'); -const runInThisContext = require('vm').runInThisContext; +const vm = require('vm'); const assert = require('assert').ok; const fs = require('fs'); const path = require('path'); @@ -405,10 +405,16 @@ Module.prototype._compile = function(content, filename) { var dirname = path.dirname(filename); + // first, create the Script object to check the syntax + vm.createScript(content, { + filename: filename, + displayErrors: false + }); + // create wrapper function var wrapper = Module.wrap(content); - var compiledWrapper = runInThisContext(wrapper, { filename: filename }); + var compiledWrapper = vm.runInThisContext(wrapper, { filename: filename }); if (global.v8debug) { if (!resolvedArgv) { // we enter the repl if we're not given a filename argument. diff --git a/test/fixtures/module-syntax-error.js b/test/fixtures/module-syntax-error.js new file mode 100644 index 00000000000000..72033e97378651 --- /dev/null +++ b/test/fixtures/module-syntax-error.js @@ -0,0 +1,5 @@ +console.log("func 1"); +})(); + +(function() { + console.log("func 2"); diff --git a/test/parallel/test-module-syntax.js b/test/parallel/test-module-syntax.js new file mode 100644 index 00000000000000..95307574c093ff --- /dev/null +++ b/test/parallel/test-module-syntax.js @@ -0,0 +1,11 @@ +var common = require('../common'); +var assert = require('assert'); + +try { + require('../fixtures/module-syntax-error.js'); +} catch (e) { + assert.equal(e.name, 'SyntaxError'); + assert.equal(e.message, 'Unexpected token }'); + return; +} +assert.ok(false, 'should not ok for code with syntax error');