From c222a6f33b23764c4816e89d9bb802d589302ed3 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Fri, 25 May 2018 16:41:20 +0300 Subject: [PATCH] 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 0b9ba6c80..2fd511e4b 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 d947e6a97..a315efd1e 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 f8d94d683..a392b3d03 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 8168b8ee5..4c9825a27 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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..8741cc817 --- /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 000000000..19d544d1d --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..3cec1b77a --- /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 000000000..082bc1bda --- /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 000000000..10572c1da --- /dev/null +++ b/test/configCases/optimization/named-modules/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + optimization: { + namedModules: true + } +};