diff --git a/lib/library/UmdLibraryPlugin.js b/lib/library/UmdLibraryPlugin.js index b7013d70c..629f87d0d 100644 --- a/lib/library/UmdLibraryPlugin.js +++ b/lib/library/UmdLibraryPlugin.js @@ -310,9 +310,11 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin { : " var a = factory();\n") + " for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n" + " }\n") + - `})(${ - runtimeTemplate.outputOptions.globalObject - }, function(${externalsArguments(externals)}) {\nreturn `, + `})(${runtimeTemplate.outputOptions.globalObject}, ${ + runtimeTemplate.supportsArrowFunction() + ? `(${externalsArguments(externals)}) =>` + : `function(${externalsArguments(externals)})` + } {\nreturn `, "webpack/universalModuleDefinition" ), source, diff --git a/test/ConfigTestCases.template.js b/test/ConfigTestCases.template.js index c52c9a83e..df68b068f 100644 --- a/test/ConfigTestCases.template.js +++ b/test/ConfigTestCases.template.js @@ -619,7 +619,12 @@ const describeCases = config => { const fn = runInNewContext ? vm.runInNewContext(code, globalContext, p) : vm.runInThisContext(code, p); - fn.call(m.exports, ...argValues); + fn.call( + testConfig.nonEsmThis + ? testConfig.nonEsmThis(module) + : m.exports, + ...argValues + ); document.currentScript = oldCurrentScript; return m.exports; } diff --git a/test/configCases/umd/issue-15545/index.js b/test/configCases/umd/issue-15545/index.js new file mode 100644 index 000000000..7813dbcc0 --- /dev/null +++ b/test/configCases/umd/issue-15545/index.js @@ -0,0 +1,5 @@ +it("should compile and run", () => { + expect(hello()).toBe("hello"); +}); + +export function hello() { return "hello"; } diff --git a/test/configCases/umd/issue-15545/test.config.js b/test/configCases/umd/issue-15545/test.config.js new file mode 100644 index 000000000..edc0b9919 --- /dev/null +++ b/test/configCases/umd/issue-15545/test.config.js @@ -0,0 +1,9 @@ +const CONTEXT = {}; +module.exports = { + nonEsmThis(module) { + return CONTEXT; + }, + findBundle() { + return ["./runtime.js", "./main.js"]; + } +}; diff --git a/test/configCases/umd/issue-15545/webpack.config.js b/test/configCases/umd/issue-15545/webpack.config.js new file mode 100644 index 000000000..73b1025f8 --- /dev/null +++ b/test/configCases/umd/issue-15545/webpack.config.js @@ -0,0 +1,19 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + entry: { + main: "./index.js" + }, + output: { + filename: "[name].js", + library: "MyLibrary", + libraryTarget: "umd", + chunkLoading: "jsonp", + chunkFormat: "array-push", + globalObject: "this" + }, + optimization: { + minimize: false, + runtimeChunk: "single" + } +};