Skip to content

Commit 6af5702

Browse files
committed
added [chunkhash] support, fixes webpack#90
1 parent 1133a56 commit 6af5702

4 files changed

Lines changed: 20 additions & 9 deletions

File tree

lib/Compilation.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,11 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
528528
var i, chunk;
529529
for(i = 0; i < this.chunks.length; i++) {
530530
var chunk = this.chunks[i];
531-
chunk.updateHash(hash);
531+
var chunkHash = new (require("crypto").Hash)("md5");
532+
chunk.updateHash(chunkHash);
533+
this.chunkTemplate.updateHash(chunkHash);
534+
chunk.hash = chunkHash.digest("hex");
535+
hash.update(chunk.hash);
532536
}
533537
this.hash = hash = hash.digest("hex");
534538
for(i = 0; i < this.modules.length; i++) {
@@ -544,6 +548,7 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
544548
for(i = 0; i < this.chunks.length; i++) {
545549
chunk = this.chunks[i];
546550
chunk.files = [];
551+
var chunkHash = chunk.hash;
547552
var source;
548553
var file;
549554
if(chunk.entry) {
@@ -561,18 +566,13 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
561566
this.assets[
562567
file = filename
563568
.replace(Template.REGEXP_HASH, hash)
569+
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
564570
.replace(Template.REGEXP_ID, chunk.id)
565571
.replace(Template.REGEXP_NAME, chunk.name || "")
566572
] = source;
567573
chunk.files.push(file);
568574
this.applyPlugins("chunk-asset", chunk, file);
569575
} else {
570-
if(this.cache) {
571-
var chunkHash = new (require("crypto").Hash)("md5");
572-
chunk.updateHash(chunkHash);
573-
this.chunkTemplate.updateHash(chunkHash);
574-
chunkHash = chunkHash.digest("hex");
575-
}
576576
if(this.cache && this.cache["c" + chunk.id] && this.cache["c" + chunk.id].hash == chunkHash) {
577577
source = this.cache["c" + chunk.id].source;
578578
} else {
@@ -587,13 +587,15 @@ Compilation.prototype.createChunkAssets = function createChunkAssets() {
587587
this.assets[
588588
file = chunkFilename
589589
.replace(Template.REGEXP_HASH, hash)
590+
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
590591
.replace(Template.REGEXP_ID, chunk.id)
591592
] = source;
592593
chunk.files.push(file);
593594
this.applyPlugins("chunk-asset", chunk, file);
594595
if(namedChunkFilename && chunk.name) {
595596
this.assets[
596597
file = namedChunkFilename
598+
.replace(Template.REGEXP_CHUNKHASH, chunkHash)
597599
.replace(Template.REGEXP_HASH, hash)
598600
.replace(Template.REGEXP_ID, chunk.id)
599601
.replace(Template.REGEXP_NAME, chunk.name || "")

lib/JsonpMainTemplate.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ JsonpMainTemplate.prototype.renderLocalVars = function(hash, chunk) {
2929
JsonpMainTemplate.prototype.renderRequireEnsure = function(hash, chunk) {
3030
var filename = this.outputOptions.filename || "bundle.js";
3131
var chunkFilename = this.outputOptions.chunkFilename || "[id]." + filename;
32+
var chunkHashMap = {};
33+
(function addChunk(c) {
34+
if(chunkHashMap[c.id]) return;
35+
if(c.id > 0)
36+
chunkHashMap[c.id] = c.hash;
37+
c.chunks.forEach(addChunk);
38+
}(chunk));
3239
return [
3340
"// \"0\" is the signal for \"already loaded\"",
3441
"if(installedChunks[chunkId] === 0)",
@@ -49,6 +56,7 @@ JsonpMainTemplate.prototype.renderRequireEnsure = function(hash, chunk) {
4956
JSON.stringify(chunkFilename
5057
.replace(Template.REGEXP_HASH, hash)
5158
.replace(Template.REGEXP_NAME, ""))
59+
.replace(Template.REGEXP_CHUNKHASH, "\" + " + JSON.stringify(chunkHashMap) + "[chunkId] + \"")
5260
.replace(Template.REGEXP_ID, "\" + chunkId + \"") + ";",
5361
"head.appendChild(script);"
5462
]),

lib/Template.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function Template(outputOptions) {
88
module.exports = Template;
99

1010
Template.REGEXP_HASH = /\[hash\]/gi;
11+
Template.REGEXP_CHUNKHASH = /\[chunkhash\]/gi;
1112
Template.REGEXP_NAME = /\[name\]/gi;
1213
Template.REGEXP_ID = /\[id\]/gi;
1314
Template.REGEXP_FILE = /\[file\]/gi;

test/browsertest/build.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ library1.on("exit", function(code) {
4040
bindOutput(main);
4141
}
4242
});
43-
// node ../../bin/webpack --output-pathinfo --colors --output-library library2 --output-public-path js/ --config library2config.js library2b library2 js/library2.js
43+
// node ../../bin/webpack --output-pathinfo --colors --output-library library2 --output-public-path js/ --output-chunk-file [chunkhash].lib2.js --config library2config.js library2b library2 js/library2.js
4444
var library2 = cp.spawn("node", join(["../../bin/webpack.js", "--output-pathinfo", "--colors", "--output-library", "library2",
45-
"--output-public-path", "js/", "--config", "library2config.js", "library2b", "library2", "js/library2.js"], extraArgsNoWatch));
45+
"--output-public-path", "js/", "--output-chunk-file", "[chunkhash].lib2.js", "--config", "library2config.js", "library2b", "library2", "js/library2.js"], extraArgsNoWatch));
4646
bindOutput(library2);

0 commit comments

Comments
 (0)