Skip to content

Commit b113a22

Browse files
committed
Make HMR request timeout configurable
1 parent 74afac5 commit b113a22

5 files changed

Lines changed: 15 additions & 8 deletions

lib/HotModuleReplacement.runtime.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
/*global $hash$ installedModules $require$ hotDownloadManifest hotDownloadUpdateChunk hotDisposeChunk modules */
5+
/*global $hash$ $requestTimeout$ installedModules $require$ hotDownloadManifest hotDownloadUpdateChunk hotDisposeChunk modules */
66
module.exports = function() {
77

88
var hotApplyOnUpdate = true;
99
var hotCurrentHash = $hash$; // eslint-disable-line no-unused-vars
10+
var hotRequestTimeout = $requestTimeout$;
1011
var hotCurrentModuleData = {};
1112
var hotCurrentChildModule; // eslint-disable-line no-unused-vars
1213
var hotCurrentParents = []; // eslint-disable-line no-unused-vars
@@ -167,7 +168,7 @@ module.exports = function() {
167168
if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status");
168169
hotApplyOnUpdate = apply;
169170
hotSetStatus("check");
170-
return hotDownloadManifest().then(function(update) {
171+
return hotDownloadManifest(hotRequestTimeout).then(function(update) {
171172
if(!update) {
172173
hotSetStatus("idle");
173174
return null;

lib/HotModuleReplacementPlugin.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ function HotModuleReplacementPlugin(options) {
1515
options = options || {};
1616
this.multiStep = options.multiStep;
1717
this.fullBuildTimeout = options.fullBuildTimeout || 200;
18+
this.requestTimeout = options.requestTimeout || 10000;
1819
}
1920
module.exports = HotModuleReplacementPlugin;
2021

2122
HotModuleReplacementPlugin.prototype.apply = function(compiler) {
2223
var multiStep = this.multiStep;
2324
var fullBuildTimeout = this.fullBuildTimeout;
25+
var requestTimeout = this.requestTimeout;
2426
var hotUpdateChunkFilename = compiler.options.output.hotUpdateChunkFilename;
2527
var hotUpdateMainFilename = compiler.options.output.hotUpdateMainFilename;
2628
compiler.plugin("compilation", function(compilation, params) {
@@ -169,6 +171,7 @@ HotModuleReplacementPlugin.prototype.apply = function(compiler) {
169171
hotInitCode
170172
.replace(/\$require\$/g, this.requireFn)
171173
.replace(/\$hash\$/g, JSON.stringify(hash))
174+
.replace(/\$requestTimeout\$/g, requestTimeout)
172175
.replace(/\/\*foreachInstalledChunks\*\//g, chunk.chunks.length > 0 ? "for(var chunkId in installedChunks)" : "var chunkId = " + JSON.stringify(chunk.id) + ";")
173176
]);
174177
});

lib/JsonpMainTemplate.runtime.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ module.exports = function() {
1818
head.appendChild(script);
1919
}
2020

21-
function hotDownloadManifest() { // eslint-disable-line no-unused-vars
21+
function hotDownloadManifest(requestTimeout) { // eslint-disable-line no-unused-vars
22+
requestTimeout = requestTimeout || 10000;
2223
return new Promise(function(resolve, reject) {
2324
if(typeof XMLHttpRequest === "undefined")
2425
return reject(new Error("No browser support"));
2526
try {
2627
var request = new XMLHttpRequest();
2728
var requestPath = $require$.p + $hotMainFilename$;
2829
request.open("GET", requestPath, true);
29-
request.timeout = 10000;
30+
request.timeout = requestTimeout;
3031
request.send(null);
3132
} catch(err) {
3233
return reject(err);

lib/webworker/WebWorkerMainTemplate.runtime.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ module.exports = function() {
1313
importScripts($require$.p + $hotChunkFilename$);
1414
}
1515

16-
function hotDownloadManifest(callback) { // eslint-disable-line no-unused-vars
16+
function hotDownloadManifest(requestTimeout) { // eslint-disable-line no-unused-vars
17+
requestTimeout = requestTimeout || 10000;
1718
return new Promise(function(resolve, reject) {
1819
if(typeof XMLHttpRequest === "undefined")
1920
return reject(new Error("No browser support"));
2021
try {
2122
var request = new XMLHttpRequest();
2223
var requestPath = $require$.p + $hotMainFilename$;
2324
request.open("GET", requestPath, true);
24-
request.timeout = 10000;
25+
request.timeout = requestTimeout;
2526
request.send(null);
2627
} catch(err) {
2728
return reject(err);

test/WebWorkerMainTemplatePlugin.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,16 @@ function hotDownloadUpdateChunk(chunkId) { // eslint-disable-line no-unused-vars
198198
importScripts(requireFn.p + "asset-path" + abc123 + "" + abc123 + "" + chunkId + "");
199199
}
200200
201-
function hotDownloadManifest(callback) { // eslint-disable-line no-unused-vars
201+
function hotDownloadManifest(requestTimeout) { // eslint-disable-line no-unused-vars
202+
requestTimeout = requestTimeout || 10000;
202203
return new Promise(function(resolve, reject) {
203204
if(typeof XMLHttpRequest === "undefined")
204205
return reject(new Error("No browser support"));
205206
try {
206207
var request = new XMLHttpRequest();
207208
var requestPath = requireFn.p + "asset-path" + abc123 + "" + abc123 + "";
208209
request.open("GET", requestPath, true);
209-
request.timeout = 10000;
210+
request.timeout = requestTimeout;
210211
request.send(null);
211212
} catch(err) {
212213
return reject(err);

0 commit comments

Comments
 (0)