diff --git a/lib/ProvidePlugin.js b/lib/ProvidePlugin.js index 0495cc3fe..8373389eb 100644 --- a/lib/ProvidePlugin.js +++ b/lib/ProvidePlugin.js @@ -66,6 +66,22 @@ class ProvidePlugin { parser.state.module.addDependency(dep); return true; }); + + parser.hooks.call.for(name).tap("ProvidePlugin", expr => { + const nameIdentifier = name.includes(".") + ? `__webpack_provided_${name.replace(/\./g, "_dot_")}` + : name; + const dep = new ProvidedDependency( + request[0], + nameIdentifier, + request.slice(1), + expr.callee.range + ); + dep.loc = expr.callee.loc; + parser.state.module.addDependency(dep); + parser.walkExpressions(expr.arguments); + return true; + }); }); }; normalModuleFactory.hooks.parser diff --git a/test/configCases/parsing/issue-11619/index.js b/test/configCases/parsing/issue-11619/index.js new file mode 100644 index 000000000..bac1af590 --- /dev/null +++ b/test/configCases/parsing/issue-11619/index.js @@ -0,0 +1,4 @@ +it("should provide a module to a called free var", function () { + var x = xxx.yyy(xxx.yyy, xxx.yyy); + expect(x).toBe("ok"); +}); diff --git a/test/configCases/parsing/issue-11619/node_modules/aaa.js b/test/configCases/parsing/issue-11619/node_modules/aaa.js new file mode 100644 index 000000000..61804145a --- /dev/null +++ b/test/configCases/parsing/issue-11619/node_modules/aaa.js @@ -0,0 +1,5 @@ +const fn = (a, b) => { + if(a === fn && b === fn) return "ok"; + return "fail"; +}; +module.exports = fn; diff --git a/test/configCases/parsing/issue-11619/webpack.config.js b/test/configCases/parsing/issue-11619/webpack.config.js new file mode 100644 index 000000000..c634d2e06 --- /dev/null +++ b/test/configCases/parsing/issue-11619/webpack.config.js @@ -0,0 +1,9 @@ +var ProvidePlugin = require("../../../../").ProvidePlugin; +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ProvidePlugin({ + "xxx.yyy": "aaa" + }) + ] +};