From b8a36d254711c044e6c41da96d70891618a00bd4 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 1 Jun 2019 10:15:19 +0200 Subject: [PATCH] Protect all module globals for CJS output from being redefined --- src/Chunk.ts | 10 +++++---- .../samples/protect-cjs-globals/_config.js | 6 ++++++ .../protect-cjs-globals/_expected/amd.js | 17 +++++++++++++++ .../protect-cjs-globals/_expected/cjs.js | 15 +++++++++++++ .../protect-cjs-globals/_expected/es.js | 7 +++++++ .../protect-cjs-globals/_expected/iife.js | 18 ++++++++++++++++ .../protect-cjs-globals/_expected/system.js | 14 +++++++++++++ .../protect-cjs-globals/_expected/umd.js | 21 +++++++++++++++++++ test/form/samples/protect-cjs-globals/main.js | 5 +++++ .../sequence-expression/_expected/cjs.js | 6 +++--- .../samples/protect-cjs-globals/_config.js | 3 +++ .../samples/protect-cjs-globals/main.js | 5 +++++ 12 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 test/form/samples/protect-cjs-globals/_config.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/amd.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/cjs.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/es.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/iife.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/system.js create mode 100644 test/form/samples/protect-cjs-globals/_expected/umd.js create mode 100644 test/form/samples/protect-cjs-globals/main.js create mode 100644 test/function/samples/protect-cjs-globals/_config.js create mode 100644 test/function/samples/protect-cjs-globals/main.js diff --git a/src/Chunk.ts b/src/Chunk.ts index c553c1ca151..23816cbe925 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -1058,10 +1058,12 @@ export default class Chunk { if (options.format !== 'es') { usedNames.add('exports'); if (options.format === 'cjs') { - usedNames.add(INTEROP_DEFAULT_VARIABLE); - if (this.exportMode === 'default') { - usedNames.add('module'); - } + usedNames + .add(INTEROP_DEFAULT_VARIABLE) + .add('require') + .add('module') + .add('__filename') + .add('__dirname'); } } diff --git a/test/form/samples/protect-cjs-globals/_config.js b/test/form/samples/protect-cjs-globals/_config.js new file mode 100644 index 00000000000..5d2d5ac0718 --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_config.js @@ -0,0 +1,6 @@ +module.exports = { + description: 'prevent conflicts with cjs module globals', + options: { + output: { name: 'bundle' } + } +}; diff --git a/test/form/samples/protect-cjs-globals/_expected/amd.js b/test/form/samples/protect-cjs-globals/_expected/amd.js new file mode 100644 index 00000000000..9cd996e86ef --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/amd.js @@ -0,0 +1,17 @@ +define(['exports'], function (exports) { 'use strict'; + + const exports$1 = 1; + const require = 2; + const module = 3; + const __filename = 4; + const __dirname = 5; + + exports.__dirname = __dirname; + exports.__filename = __filename; + exports.exports = exports$1; + exports.module = module; + exports.require = require; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/protect-cjs-globals/_expected/cjs.js b/test/form/samples/protect-cjs-globals/_expected/cjs.js new file mode 100644 index 00000000000..513260e0d7d --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/cjs.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const exports$1 = 1; +const require$1 = 2; +const module$1 = 3; +const __filename$1 = 4; +const __dirname$1 = 5; + +exports.__dirname = __dirname$1; +exports.__filename = __filename$1; +exports.exports = exports$1; +exports.module = module$1; +exports.require = require$1; diff --git a/test/form/samples/protect-cjs-globals/_expected/es.js b/test/form/samples/protect-cjs-globals/_expected/es.js new file mode 100644 index 00000000000..d45e878f597 --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/es.js @@ -0,0 +1,7 @@ +const exports = 1; +const require = 2; +const module = 3; +const __filename = 4; +const __dirname = 5; + +export { __dirname, __filename, exports, module, require }; diff --git a/test/form/samples/protect-cjs-globals/_expected/iife.js b/test/form/samples/protect-cjs-globals/_expected/iife.js new file mode 100644 index 00000000000..a38758661d4 --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/iife.js @@ -0,0 +1,18 @@ +var bundle = (function (exports) { + 'use strict'; + + const exports$1 = 1; + const require = 2; + const module = 3; + const __filename = 4; + const __dirname = 5; + + exports.__dirname = __dirname; + exports.__filename = __filename; + exports.exports = exports$1; + exports.module = module; + exports.require = require; + + return exports; + +}({})); diff --git a/test/form/samples/protect-cjs-globals/_expected/system.js b/test/form/samples/protect-cjs-globals/_expected/system.js new file mode 100644 index 00000000000..d1df626676d --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/system.js @@ -0,0 +1,14 @@ +System.register('bundle', [], function (exports) { + 'use strict'; + return { + execute: function () { + + const exports$1 = exports('exports', 1); + const require = exports('require', 2); + const module = exports('module', 3); + const __filename = exports('__filename', 4); + const __dirname = exports('__dirname', 5); + + } + }; +}); diff --git a/test/form/samples/protect-cjs-globals/_expected/umd.js b/test/form/samples/protect-cjs-globals/_expected/umd.js new file mode 100644 index 00000000000..f144d9399c5 --- /dev/null +++ b/test/form/samples/protect-cjs-globals/_expected/umd.js @@ -0,0 +1,21 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; + + const exports$1 = 1; + const require = 2; + const module = 3; + const __filename = 4; + const __dirname = 5; + + exports.__dirname = __dirname; + exports.__filename = __filename; + exports.exports = exports$1; + exports.module = module; + exports.require = require; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/protect-cjs-globals/main.js b/test/form/samples/protect-cjs-globals/main.js new file mode 100644 index 00000000000..8f2228752c3 --- /dev/null +++ b/test/form/samples/protect-cjs-globals/main.js @@ -0,0 +1,5 @@ +export const exports = 1; +export const require = 2; +export const module = 3; +export const __filename = 4; +export const __dirname = 5; diff --git a/test/form/samples/sequence-expression/_expected/cjs.js b/test/form/samples/sequence-expression/_expected/cjs.js index fc804d04282..aae14522bca 100644 --- a/test/form/samples/sequence-expression/_expected/cjs.js +++ b/test/form/samples/sequence-expression/_expected/cjs.js @@ -20,6 +20,6 @@ var e = (foo$1()); var g = ((() => {console.log(foo$1());})(), 1); // should maintain this context -var module = {}; -module.bar = function () { console.log( 'bar' );}; -var h = (0, module.bar)(); +var module$1 = {}; +module$1.bar = function () { console.log( 'bar' );}; +var h = (0, module$1.bar)(); diff --git a/test/function/samples/protect-cjs-globals/_config.js b/test/function/samples/protect-cjs-globals/_config.js new file mode 100644 index 00000000000..26fd141de27 --- /dev/null +++ b/test/function/samples/protect-cjs-globals/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'prevent conflicts with cjs module globals' +}; diff --git a/test/function/samples/protect-cjs-globals/main.js b/test/function/samples/protect-cjs-globals/main.js new file mode 100644 index 00000000000..8f2228752c3 --- /dev/null +++ b/test/function/samples/protect-cjs-globals/main.js @@ -0,0 +1,5 @@ +export const exports = 1; +export const require = 2; +export const module = 3; +export const __filename = 4; +export const __dirname = 5;