diff --git a/lib/JsonpMainTemplatePlugin.js b/lib/JsonpMainTemplatePlugin.js index 0e0b451e01f..5bcd5c572fb 100644 --- a/lib/JsonpMainTemplatePlugin.js +++ b/lib/JsonpMainTemplatePlugin.js @@ -19,9 +19,7 @@ class JsonpMainTemplatePlugin { this.indent( chunk.ids.map(id => `${JSON.stringify(id)}: 0`).join(",\n") ), - "};", - "", - "var resolvedPromise = new Promise(function(resolve) { resolve(); });" + "};" ]); } return source; @@ -81,26 +79,27 @@ class JsonpMainTemplatePlugin { }); mainTemplate.plugin("require-ensure", function(_, chunk, hash) { return this.asString([ - "if(installedChunks[chunkId] === 0) {", + "var installedChunkData = installedChunks[chunkId];", + "if(installedChunkData === 0) {", this.indent([ - "return resolvedPromise;" + "return new Promise(function(resolve) { resolve(); });" ]), "}", "", "// a Promise means \"currently loading\".", - "if(installedChunks[chunkId]) {", + "if(installedChunkData) {", this.indent([ - "return installedChunks[chunkId][2];" + "return installedChunkData[2];" ]), "}", "", "// setup Promise in chunk cache", "var promise = new Promise(function(resolve, reject) {", this.indent([ - "installedChunks[chunkId] = [resolve, reject];" + "installedChunkData = installedChunks[chunkId] = [resolve, reject];" ]), "});", - "installedChunks[chunkId][2] = promise;", + "installedChunkData[2] = promise;", "", "// start chunk loading", "var head = document.getElementsByTagName('head')[0];", diff --git a/lib/webworker/WebWorkerMainTemplatePlugin.js b/lib/webworker/WebWorkerMainTemplatePlugin.js index 51a1698a132..a794745d4c6 100644 --- a/lib/webworker/WebWorkerMainTemplatePlugin.js +++ b/lib/webworker/WebWorkerMainTemplatePlugin.js @@ -21,9 +21,7 @@ class WebWorkerMainTemplatePlugin { return id + ": 1"; }).join(",\n") ), - "};", - "", - "var resolvedPromise = new Promise(function(resolve) { resolve(); });" + "};" ]); } return source; @@ -31,22 +29,26 @@ class WebWorkerMainTemplatePlugin { mainTemplate.plugin("require-ensure", function(_, chunk, hash) { const chunkFilename = this.outputOptions.chunkFilename; return this.asString([ - "// \"1\" is the signal for \"already loaded\"", - "if(!installedChunks[chunkId]) {", + "return new Promise(function(resolve) {", this.indent([ - "importScripts(" + - this.applyPluginsWaterfall("asset-path", JSON.stringify(chunkFilename), { - hash: "\" + " + this.renderCurrentHashCode(hash) + " + \"", - hashWithLength: function(length) { - return "\" + " + this.renderCurrentHashCode(hash, length) + " + \""; - }.bind(this), - chunk: { - id: "\" + chunkId + \"" - } - }) + ");" + "// \"1\" is the signal for \"already loaded\"", + "if(!installedChunks[chunkId]) {", + this.indent([ + "importScripts(" + + this.applyPluginsWaterfall("asset-path", JSON.stringify(chunkFilename), { + hash: "\" + " + this.renderCurrentHashCode(hash) + " + \"", + hashWithLength: function(length) { + return "\" + " + this.renderCurrentHashCode(hash, length) + " + \""; + }.bind(this), + chunk: { + id: "\" + chunkId + \"" + } + }) + ");" + ]), + "}", + "resolve();" ]), - "}", - "return resolvedPromise;" + "});" ]); }); mainTemplate.plugin("bootstrap", function(source, chunk, hash) { diff --git a/test/WebWorkerMainTemplatePlugin.test.js b/test/WebWorkerMainTemplatePlugin.test.js index f8019ecd29f..b8dc01b1941 100644 --- a/test/WebWorkerMainTemplatePlugin.test.js +++ b/test/WebWorkerMainTemplatePlugin.test.js @@ -85,8 +85,6 @@ var installedChunks = { 2: 1, 3: 1 }; - -var resolvedPromise = new Promise(function(resolve) { resolve(); }); `.trim()) }); }); @@ -109,11 +107,13 @@ var resolvedPromise = new Promise(function(resolve) { resolve(); }); it("creates import scripts call and promise resolve", () => { env.source.should.be.exactly(` +return new Promise(function(resolve) { // "1" is the signal for "already loaded" if(!installedChunks[chunkId]) { importScripts("asset-path" + abc123 + "" + abc123 + "" + chunkId + ""); } -return resolvedPromise; +resolve(); +}); `.trim()) }); }); diff --git a/test/statsCases/commons-chunk-min-size-0/expected.txt b/test/statsCases/commons-chunk-min-size-0/expected.txt index d56bbc66c7e..a5025646bff 100644 --- a/test/statsCases/commons-chunk-min-size-0/expected.txt +++ b/test/statsCases/commons-chunk-min-size-0/expected.txt @@ -2,7 +2,7 @@ Hash: dc6038bec87a57d1a45e Time: Xms Asset Size Chunks Chunk Names entry-1.js 25 bytes 0 [emitted] entry-1 -vendor-1.js 6.92 kB 1 [emitted] vendor-1 +vendor-1.js 6.93 kB 1 [emitted] vendor-1 chunk {0} entry-1.js (entry-1) 0 bytes {1} [initial] [rendered] chunk {1} vendor-1.js (vendor-1) 329 bytes [entry] [rendered] [0] (webpack)/test/statsCases/commons-chunk-min-size-0/modules/a.js 22 bytes {1} [built] diff --git a/test/statsCases/limit-chunk-count-plugin/expected.txt b/test/statsCases/limit-chunk-count-plugin/expected.txt index 6e558fdfeb5..d3349caff30 100644 --- a/test/statsCases/limit-chunk-count-plugin/expected.txt +++ b/test/statsCases/limit-chunk-count-plugin/expected.txt @@ -31,7 +31,7 @@ Child Asset Size Chunks Chunk Names 0.bundle.js 445 bytes 0 [emitted] 1.bundle.js 204 bytes 1 [emitted] - bundle.js 6.27 kB 2 [emitted] main + bundle.js 6.28 kB 2 [emitted] main chunk {0} 0.bundle.js 74 bytes {2} [rendered] [0] (webpack)/test/statsCases/limit-chunk-count-plugin/a.js 22 bytes {0} [built] [2] (webpack)/test/statsCases/limit-chunk-count-plugin/c.js 30 bytes {0} [built]