diff --git a/lib/module.js b/lib/module.js index ba0b4f355963db..304387d03083f8 100644 --- a/lib/module.js +++ b/lib/module.js @@ -270,7 +270,13 @@ Module._load = function(request, parent, isMain) { } Module._cache[filename] = module; - module.load(filename); + try { + module.load(filename); + } catch (err) { + delete Module._cache[filename]; + throw err; + } + return module.exports; }; diff --git a/test/simple/test-require-exceptions.js b/test/simple/test-require-exceptions.js new file mode 100644 index 00000000000000..6dc12212ae38fc --- /dev/null +++ b/test/simple/test-require-exceptions.js @@ -0,0 +1,12 @@ +var common = require('../common'); +var assert = require('assert'); + +// A module with an error in it should throw +assert.throws(function() { + require(common.fixturesDir + '/throws_error'); +}); + +// Requiring the same module again should throw as well +assert.throws(function() { + require(common.fixturesDir + '/throws_error'); +});