diff options
author | Johannes Ewald <johannes.ewald@peerigon.com> | 2014-11-04 11:36:40 +0300 |
---|---|---|
committer | Johannes Ewald <johannes.ewald@peerigon.com> | 2014-11-04 11:36:40 +0300 |
commit | 09dc5be9128bb07766b01bda9e053046478f9a03 (patch) | |
tree | 2923821380c843c74cd5cf9f3b71eae17e945f56 | |
parent | 1eede09155581d71bc311e0b7d16e0109d607e05 (diff) |
Fix shadowing of internal `module`, `exports` and `require` when a global counterpart exists
@see https://github.com/jhnns/rewire-webpack/pull/6
-rw-r--r-- | lib/getImportGlobalsSrc.js | 4 | ||||
-rw-r--r-- | test/getImportGlobalsSrc.test.js | 17 |
2 files changed, 19 insertions, 2 deletions
diff --git a/lib/getImportGlobalsSrc.js b/lib/getImportGlobalsSrc.js index 66e69b1..10dfe87 100644 --- a/lib/getImportGlobalsSrc.js +++ b/lib/getImportGlobalsSrc.js @@ -16,6 +16,10 @@ function getImportGlobalsSrc(ignore) { ignore = ignore || []; // global itself can't be overridden because it's the only reference to our real global objects ignore.push("global"); + // ignore 'module', 'exports' and 'require' on the global scope, because otherwise our code would + // shadow the module-internal variables + // @see https://github.com/jhnns/rewire-webpack/pull/6 + ignore.push("module", "exports", "require"); for (key in globalObj) { /* jshint forin: false */ if (ignore.indexOf(key) !== -1) { diff --git a/test/getImportGlobalsSrc.test.js b/test/getImportGlobalsSrc.test.js index e733614..7e2043b 100644 --- a/test/getImportGlobalsSrc.test.js +++ b/test/getImportGlobalsSrc.test.js @@ -7,11 +7,24 @@ describe("getImportGlobalsSrc", function () { var context = {
global: global
},
+ expectedGlobals,
src,
- actualGlobals,
- expectedGlobals = Object.keys(global);
+ actualGlobals;
+
+ // Temporarily set module-internal variables on the global scope to check if getImportGlobalsSrc()
+ // ignores them properly
+ global.module = module;
+ global.exports = exports;
+ global.require = require;
src = getImportGlobalsSrc();
+
+ delete global.module;
+ delete global.exports;
+ delete global.require;
+
+ expectedGlobals = Object.keys(global);
+
vm.runInNewContext(src, context);
actualGlobals = Object.keys(context).filter(function (key) {
// node v0.10 does not set a constructor property on the context
|