Skip to content

Commit 44f8709

Browse files
committed
more options for hashing
1 parent 29f596c commit 44f8709

File tree

4 files changed

+21
-10
lines changed

4 files changed

+21
-10
lines changed

lib/Compilation.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -521,25 +521,30 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
521521
var filename = outputOptions.filename || "bundle.js";
522522
var chunkFilename = outputOptions.chunkFilename || "[id]." + filename.replace(Template.REGEXP_NAME, "");
523523
var namedChunkFilename = outputOptions.namedChunkFilename || null;
524-
var hash = new (require("crypto").Hash)("md5");
524+
var hashFunction = outputOptions.hashFunction;
525+
var hashDigest = outputOptions.hashDigest;
526+
var hashDigestLength = outputOptions.hashDigestLength;
527+
var hash = new (require("crypto").Hash)(hashFunction);
525528
this.mainTemplate.updateHash(hash);
526529
this.chunkTemplate.updateHash(hash);
527530
this.moduleTemplate.updateHash(hash);
528531
var i, chunk;
529532
for(i = 0; i < this.chunks.length; i++) {
530533
var chunk = this.chunks[i];
531-
var chunkHash = new (require("crypto").Hash)("md5");
534+
var chunkHash = new (require("crypto").Hash)(hashFunction);
532535
chunk.updateHash(chunkHash);
533536
this.chunkTemplate.updateHash(chunkHash);
534-
chunk.hash = chunkHash.digest("hex");
537+
chunk.hash = chunkHash.digest(hashDigest);
535538
hash.update(chunk.hash);
539+
chunk.renderedHash = chunk.hash.substr(0, hashDigestLength);
536540
}
537-
this.hash = hash = hash.digest("hex");
541+
hash = hash.digest(hashDigest);
542+
this.hash = hash.substr(0, hashDigestLength);
538543
for(i = 0; i < this.modules.length; i++) {
539544
var module = this.modules[i];
540545
if(module.assets) {
541546
Object.keys(module.assets).forEach(function(name) {
542-
var file = name.replace(Template.REGEXP_HASH, hash);
547+
var file = name.replace(Template.REGEXP_HASH, this.hash);
543548
this.assets[file] = module.assets[name];
544549
this.applyPlugins("module-asset", module, file);
545550
}, this);
@@ -565,8 +570,8 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
565570
}
566571
this.assets[
567572
file = filename
568-
.replace(Template.REGEXP_HASH, hash)
569-
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
573+
.replace(Template.REGEXP_HASH, this.hash)
574+
.replace(Template.REGEXP_CHUNKHASH, chunk.renderedHash)
570575
.replace(Template.REGEXP_ID, chunk.id)
571576
.replace(Template.REGEXP_NAME, chunk.name || "")
572577
] = source;
@@ -587,15 +592,15 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
587592
this.assets[
588593
file = chunkFilename
589594
.replace(Template.REGEXP_HASH, hash)
590-
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
595+
.replace(Template.REGEXP_CHUNKHASH, chunk.renderedHash)
591596
.replace(Template.REGEXP_ID, chunk.id)
592597
] = source;
593598
chunk.files.push(file);
594599
this.applyPlugins("chunk-asset", chunk, file);
595600
if(namedChunkFilename && chunk.name) {
596601
this.assets[
597602
file = namedChunkFilename
598-
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
603+
.replace(Template.REGEXP_CHUNKHASH, chunk.renderedHash)
599604
.replace(Template.REGEXP_HASH, hash)
600605
.replace(Template.REGEXP_ID, chunk.id)
601606
.replace(Template.REGEXP_NAME, chunk.name || "")

lib/JsonpMainTemplate.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ JsonpMainTemplate.prototype.renderRequireEnsure = function(hash, chunk) {
3333
(function addChunk(c) {
3434
if(chunkHashMap[c.id]) return;
3535
if(c.id > 0)
36-
chunkHashMap[c.id] = c.hash;
36+
chunkHashMap[c.id] = c.renderedHash;
3737
c.chunks.forEach(addChunk);
3838
}(chunk));
3939
return [

lib/WebpackOptionsDefaulter.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ function WebpackOptionsDefaulter() {
2020
this.set("output.libraryTarget", "var");
2121
this.set("output.path", "");
2222
this.set("output.sourceMapFilename", "[file].map");
23+
this.set("output.hashFunction", "md5");
24+
this.set("output.hashDigest", "hex");
25+
this.set("output.hashDigestLength", 20);
2326

2427
this.set("node.console", false);
2528
this.set("node.process", true);

test/browsertest/library2config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
module.exports = {
2+
output: {
3+
hashDigestLength: 5
4+
},
25
module: {
36
postLoaders: [
47
{ test: /extra2?\.js/, loader: "raw!extra!val?cacheable" }

0 commit comments

Comments
 (0)