From c222a6f33b23764c4816e89d9bb802d589302ed3 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Fri, 25 May 2018 16:41:20 +0300 Subject: [PATCH 1/4] feat: implement option for `HashedModuleIdes` plugin --- lib/WebpackOptionsApply.js | 3 +++ lib/WebpackOptionsDefaulter.js | 2 ++ schemas/WebpackOptions.json | 4 ++++ test/TestCases.template.js | 1 + .../optimization/hashed-module-ids/files/file1.js | 1 + .../optimization/hashed-module-ids/files/file2.js | 1 + .../optimization/hashed-module-ids/files/file3.js | 1 + .../optimization/hashed-module-ids/files/file4.js | 1 + .../optimization/hashed-module-ids/files/file5.js | 1 + .../optimization/hashed-module-ids/index.js | 10 ++++++++++ .../optimization/hashed-module-ids/webpack.config.js | 5 +++++ .../optimization/named-modules/files/file1.js | 1 + .../optimization/named-modules/files/file2.js | 1 + .../optimization/named-modules/files/file3.js | 1 + .../optimization/named-modules/files/file4.js | 1 + .../optimization/named-modules/files/file5.js | 1 + test/configCases/optimization/named-modules/index.js | 10 ++++++++++ .../optimization/named-modules/webpack.config.js | 5 +++++ 18 files changed, 50 insertions(+) create mode 100644 test/configCases/optimization/hashed-module-ids/files/file1.js create mode 100644 test/configCases/optimization/hashed-module-ids/files/file2.js create mode 100644 test/configCases/optimization/hashed-module-ids/files/file3.js create mode 100644 test/configCases/optimization/hashed-module-ids/files/file4.js create mode 100644 test/configCases/optimization/hashed-module-ids/files/file5.js create mode 100644 test/configCases/optimization/hashed-module-ids/index.js create mode 100644 test/configCases/optimization/hashed-module-ids/webpack.config.js create mode 100644 test/configCases/optimization/named-modules/files/file1.js create mode 100644 test/configCases/optimization/named-modules/files/file2.js create mode 100644 test/configCases/optimization/named-modules/files/file3.js create mode 100644 test/configCases/optimization/named-modules/files/file4.js create mode 100644 test/configCases/optimization/named-modules/files/file5.js create mode 100644 test/configCases/optimization/named-modules/index.js create mode 100644 test/configCases/optimization/named-modules/webpack.config.js diff --git a/lib/WebpackOptionsApply.js b/lib/WebpackOptionsApply.js index 0b9ba6c80ea..2fd511e4b37 100644 --- a/lib/WebpackOptionsApply.js +++ b/lib/WebpackOptionsApply.js @@ -56,6 +56,7 @@ const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin"); const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin"); const NamedModulesPlugin = require("./NamedModulesPlugin"); const NamedChunksPlugin = require("./NamedChunksPlugin"); +const HashedModuleIdsPlugin = require("./HashedModuleIdsPlugin"); const DefinePlugin = require("./DefinePlugin"); const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin"); @@ -328,6 +329,8 @@ class WebpackOptionsApply extends OptionsApply { new NoEmitOnErrorsPlugin().apply(compiler); if (options.optimization.namedModules) new NamedModulesPlugin().apply(compiler); + if (options.optimization.hashedModuleIds) + new HashedModuleIdsPlugin().apply(compiler); if (options.optimization.namedChunks) new NamedChunksPlugin().apply(compiler); if (options.optimization.nodeEnv) { diff --git a/lib/WebpackOptionsDefaulter.js b/lib/WebpackOptionsDefaulter.js index d947e6a97db..a315efd1eb7 100644 --- a/lib/WebpackOptionsDefaulter.js +++ b/lib/WebpackOptionsDefaulter.js @@ -258,6 +258,8 @@ class WebpackOptionsDefaulter extends OptionsDefaulter { "make", options => options.mode === "development" ); + // TODO enable for production mode in webpack 5 + this.set("optimization.hashedModuleIds", false); this.set( "optimization.namedChunks", "make", diff --git a/schemas/WebpackOptions.json b/schemas/WebpackOptions.json index f8d94d68320..a392b3d033c 100644 --- a/schemas/WebpackOptions.json +++ b/schemas/WebpackOptions.json @@ -1546,6 +1546,10 @@ "description": "Use readable module identifiers for better debugging", "type": "boolean" }, + "hashedModuleIds": { + "description": "Use hashed module id instead module identifiers for better long term caching", + "type": "boolean" + }, "namedChunks": { "description": "Use readable chunk identifiers for better debugging", "type": "boolean" diff --git a/test/TestCases.template.js b/test/TestCases.template.js index 8168b8ee5c4..4c9825a2756 100644 --- a/test/TestCases.template.js +++ b/test/TestCases.template.js @@ -29,6 +29,7 @@ const DEFAULT_OPTIMIZATIONS = { noEmitOnErrors: false, concatenateModules: false, namedModules: false, + hashedModuleIds: false, minimizer: [uglifyJsForTesting] }; diff --git a/test/configCases/optimization/hashed-module-ids/files/file1.js b/test/configCases/optimization/hashed-module-ids/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file2.js b/test/configCases/optimization/hashed-module-ids/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file3.js b/test/configCases/optimization/hashed-module-ids/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file4.js b/test/configCases/optimization/hashed-module-ids/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file5.js b/test/configCases/optimization/hashed-module-ids/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/index.js b/test/configCases/optimization/hashed-module-ids/index.js new file mode 100644 index 00000000000..8741cc8173a --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/index.js @@ -0,0 +1,10 @@ +var path = require("path"); + +it("should have named modules ids", function() { + for (var i = 1; i <= 5; i++) { + var expectedModuleId = "file" + i + ".js"; + var moduleId = require("./files/file" + i + ".js"); + + expect(path.basename(moduleId)).not.toBe(expectedModuleId); + } +}); diff --git a/test/configCases/optimization/hashed-module-ids/webpack.config.js b/test/configCases/optimization/hashed-module-ids/webpack.config.js new file mode 100644 index 00000000000..19d544d1dbe --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + optimization: { + hashedModuleIds: true + } +}; diff --git a/test/configCases/optimization/named-modules/files/file1.js b/test/configCases/optimization/named-modules/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file2.js b/test/configCases/optimization/named-modules/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file3.js b/test/configCases/optimization/named-modules/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file4.js b/test/configCases/optimization/named-modules/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file5.js b/test/configCases/optimization/named-modules/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/index.js b/test/configCases/optimization/named-modules/index.js new file mode 100644 index 00000000000..082bc1bda00 --- /dev/null +++ b/test/configCases/optimization/named-modules/index.js @@ -0,0 +1,10 @@ +var path = require("path"); + +it("should have named modules ids", function() { + for (var i = 1; i <= 5; i++) { + var expectedModuleId = "file" + i + ".js"; + var moduleId = require("./files/file" + i + ".js"); + + expect(path.basename(moduleId)).toBe(expectedModuleId); + } +}); diff --git a/test/configCases/optimization/named-modules/webpack.config.js b/test/configCases/optimization/named-modules/webpack.config.js new file mode 100644 index 00000000000..10572c1da34 --- /dev/null +++ b/test/configCases/optimization/named-modules/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + optimization: { + namedModules: true + } +}; From 39d0bcb5951b4ceabb177c8ac2fafab879678fd7 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 7 Jun 2018 14:22:35 +0200 Subject: [PATCH 2/4] spacings --- lib/WebpackOptionsApply.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/WebpackOptionsApply.js b/lib/WebpackOptionsApply.js index 17562c3c792..f22ca8c3074 100644 --- a/lib/WebpackOptionsApply.js +++ b/lib/WebpackOptionsApply.js @@ -354,10 +354,10 @@ class WebpackOptionsApply extends OptionsApply { } if (options.optimization.namedModules) { new NamedModulesPlugin().apply(compiler); - } + } if (options.optimization.hashedModuleIds) { new HashedModuleIdsPlugin().apply(compiler); - } + } if (options.optimization.namedChunks) { new NamedChunksPlugin().apply(compiler); } From 07a50001f03e0d50b098d2a51b5efee06da94f18 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Fri, 15 Jun 2018 18:55:25 +0300 Subject: [PATCH 3/4] remove comment --- lib/WebpackOptionsDefaulter.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/WebpackOptionsDefaulter.js b/lib/WebpackOptionsDefaulter.js index 264e6f01a68..f0d3f8922e0 100644 --- a/lib/WebpackOptionsDefaulter.js +++ b/lib/WebpackOptionsDefaulter.js @@ -263,7 +263,6 @@ class WebpackOptionsDefaulter extends OptionsDefaulter { "make", options => options.mode === "development" ); - // TODO enable for production mode in webpack 5 this.set("optimization.hashedModuleIds", false); this.set( "optimization.namedChunks", From f6a86d8c6c771c350bde59525e756f7b420a7c55 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 27 Jun 2018 14:02:37 +0200 Subject: [PATCH 4/4] improve test case --- test/configCases/optimization/hashed-module-ids/index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/configCases/optimization/hashed-module-ids/index.js b/test/configCases/optimization/hashed-module-ids/index.js index 8741cc8173a..93aeb5474b8 100644 --- a/test/configCases/optimization/hashed-module-ids/index.js +++ b/test/configCases/optimization/hashed-module-ids/index.js @@ -1,10 +1,7 @@ -var path = require("path"); - it("should have named modules ids", function() { for (var i = 1; i <= 5; i++) { - var expectedModuleId = "file" + i + ".js"; var moduleId = require("./files/file" + i + ".js"); - expect(path.basename(moduleId)).not.toBe(expectedModuleId); + expect(moduleId).toMatch(/^[/=a-zA-Z0-9]{4,5}$/); } });