diff --git a/lib/WebpackOptionsApply.js b/lib/WebpackOptionsApply.js index d583787ac13..f22ca8c3074 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"); const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin"); @@ -354,6 +355,9 @@ 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); } diff --git a/lib/WebpackOptionsDefaulter.js b/lib/WebpackOptionsDefaulter.js index e15d58d7905..f0d3f8922e0 100644 --- a/lib/WebpackOptionsDefaulter.js +++ b/lib/WebpackOptionsDefaulter.js @@ -263,6 +263,7 @@ class WebpackOptionsDefaulter extends OptionsDefaulter { "make", options => options.mode === "development" ); + this.set("optimization.hashedModuleIds", false); this.set( "optimization.namedChunks", "make", diff --git a/schemas/WebpackOptions.json b/schemas/WebpackOptions.json index ed3dfa894c9..2fe65fb16b3 100644 --- a/schemas/WebpackOptions.json +++ b/schemas/WebpackOptions.json @@ -1554,6 +1554,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 57dab3269db..89e63c7cadb 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..93aeb5474b8 --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/index.js @@ -0,0 +1,7 @@ +it("should have named modules ids", function() { + for (var i = 1; i <= 5; i++) { + var moduleId = require("./files/file" + i + ".js"); + + expect(moduleId).toMatch(/^[/=a-zA-Z0-9]{4,5}$/); + } +}); 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 + } +};