From 0d408d1c7ffa4488b72019a41542a0a1562c78a4 Mon Sep 17 00:00:00 2001 From: Ivan Kopeykin Date: Fri, 15 Apr 2022 13:48:17 +0300 Subject: [PATCH] fix modules concatenation with importModule usage --- lib/dependencies/LoaderDependency.js | 13 +++++++++++++ lib/dependencies/LoaderImportDependency.js | 13 +++++++++++++ lib/optimize/ModuleConcatenationPlugin.js | 2 +- .../concatenate-modules/import-module/a.txt | 1 + .../concatenate-modules/import-module/index.js | 7 +++++++ .../concatenate-modules/import-module/loader.js | 8 ++++++++ .../concatenate-modules/import-module/module1.js | 3 +++ .../import-module/webpack.config.js | 6 ++++++ 8 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/configCases/concatenate-modules/import-module/a.txt create mode 100644 test/configCases/concatenate-modules/import-module/index.js create mode 100644 test/configCases/concatenate-modules/import-module/loader.js create mode 100644 test/configCases/concatenate-modules/import-module/module1.js create mode 100644 test/configCases/concatenate-modules/import-module/webpack.config.js diff --git a/lib/dependencies/LoaderDependency.js b/lib/dependencies/LoaderDependency.js index 472d68fe59c..ce4d3e0df12 100644 --- a/lib/dependencies/LoaderDependency.js +++ b/lib/dependencies/LoaderDependency.js @@ -7,6 +7,11 @@ const ModuleDependency = require("./ModuleDependency"); +/** @typedef {import("../ModuleGraph")} ModuleGraph */ +/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */ +/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */ +/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */ + class LoaderDependency extends ModuleDependency { /** * @param {string} request request string @@ -22,6 +27,14 @@ class LoaderDependency extends ModuleDependency { get category() { return "loader"; } + + /** + * @param {ModuleGraph} moduleGraph module graph + * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active + */ + getCondition(moduleGraph) { + return false; + } } module.exports = LoaderDependency; diff --git a/lib/dependencies/LoaderImportDependency.js b/lib/dependencies/LoaderImportDependency.js index e740cc9186b..c0492080514 100644 --- a/lib/dependencies/LoaderImportDependency.js +++ b/lib/dependencies/LoaderImportDependency.js @@ -7,6 +7,11 @@ const ModuleDependency = require("./ModuleDependency"); +/** @typedef {import("../ModuleGraph")} ModuleGraph */ +/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */ +/** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */ +/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */ + class LoaderImportDependency extends ModuleDependency { /** * @param {string} request request string @@ -23,6 +28,14 @@ class LoaderImportDependency extends ModuleDependency { get category() { return "loaderImport"; } + + /** + * @param {ModuleGraph} moduleGraph module graph + * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active + */ + getCondition(moduleGraph) { + return false; + } } module.exports = LoaderImportDependency; diff --git a/lib/optimize/ModuleConcatenationPlugin.js b/lib/optimize/ModuleConcatenationPlugin.js index 5498928c1c8..84f6cf3216d 100644 --- a/lib/optimize/ModuleConcatenationPlugin.js +++ b/lib/optimize/ModuleConcatenationPlugin.js @@ -606,7 +606,7 @@ class ModuleConcatenationPlugin { incomingConnectionsFromNonModules.filter(connection => { // We are not interested in inactive connections // or connections without dependency - return connection.isActive(runtime) || connection.dependency; + return connection.isActive(runtime); }); if (activeNonModulesConnections.length > 0) { const problem = requestShortener => { diff --git a/test/configCases/concatenate-modules/import-module/a.txt b/test/configCases/concatenate-modules/import-module/a.txt new file mode 100644 index 00000000000..1269488f7fb --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/a.txt @@ -0,0 +1 @@ +data diff --git a/test/configCases/concatenate-modules/import-module/index.js b/test/configCases/concatenate-modules/import-module/index.js new file mode 100644 index 00000000000..76922431787 --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/index.js @@ -0,0 +1,7 @@ +import url from "./loader!!"; +import {url as url2} from "./module1"; + +it("should compile and run", () => { + expect(url).toBe("webpack:///a.txt"); + expect(url2.toString()).toMatch(/^file:/); +}); diff --git a/test/configCases/concatenate-modules/import-module/loader.js b/test/configCases/concatenate-modules/import-module/loader.js new file mode 100644 index 00000000000..d09266dadfa --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").LoaderDefinitionFunction} */ +module.exports = function () { + const callback = this.async(); + this.importModule("./module1", { baseUri: "webpack://" }, (err, exports) => { + if (err) return callback(err); + callback(null, `module.exports = ${JSON.stringify(exports.url)}`); + }); +}; diff --git a/test/configCases/concatenate-modules/import-module/module1.js b/test/configCases/concatenate-modules/import-module/module1.js new file mode 100644 index 00000000000..5600ae2d20d --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/module1.js @@ -0,0 +1,3 @@ +const url = new URL("./a.txt", import.meta.url); + +export { url } diff --git a/test/configCases/concatenate-modules/import-module/webpack.config.js b/test/configCases/concatenate-modules/import-module/webpack.config.js new file mode 100644 index 00000000000..161c13c0dd5 --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/webpack.config.js @@ -0,0 +1,6 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + assetModuleFilename: "[name][ext]" + } +};