Skip to content

Commit 636d97e

Browse files
committed
show warning when using HMR incorrectly
fixed webpack#480
1 parent 4891225 commit 636d97e

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

lib/HotModuleReplacementPlugin.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ HotModuleReplacementPlugin.prototype.apply = function(compiler) {
152152
return this.asString([
153153
source + ",",
154154
"hot: hotCreateModule(" + varModuleId + "),",
155-
"parents: [hotCurrentParent],",
155+
"parents: hotCurrentParents,",
156156
"children: []"
157157
]);
158158
});
@@ -211,20 +211,30 @@ var hotInitCode = Template.getFunctionContent(function() {
211211
var hotApplyOnUpdate = true;
212212
var hotCurrentHash = $hash$;
213213
var hotCurrentModuleData = {};
214-
var hotCurrentParent = 0;
214+
var hotCurrentParents = [];
215215

216216
function hotCreateRequire(moduleId) {
217217
var me = installedModules[moduleId];
218+
if(!me) return $require$;
218219
var fn = function(request) {
219-
if(installedModules[request] && installedModules[request].parents.indexOf(moduleId) < 0)
220-
installedModules[request].parents.push(moduleId);
221-
if(me && me.children.indexOf(request) < 0)
222-
me.children.push(request);
223-
hotCurrentParent = moduleId;
220+
if(me.hot.active) {
221+
if(installedModules[request]) {
222+
if(installedModules[request].parents.indexOf(moduleId) < 0)
223+
installedModules[request].parents.push(moduleId);
224+
if(me.children.indexOf(request) < 0)
225+
me.children.push(request);
226+
} else hotCurrentParents = [moduleId];
227+
} else {
228+
console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId);
229+
hotCurrentParents = [];
230+
}
224231
return $require$(request);
225232
};
226-
for(var name in $require$)
227-
fn[name] = $require$[name];
233+
for(var name in $require$) {
234+
if(Object.prototype.hasOwnProperty.call($require$, name)) {
235+
fn[name] = $require$[name];
236+
}
237+
}
228238
fn.e = function(chunkId, callback) {
229239
if(hotStatus === "ready")
230240
hotSetStatus("prepare");
@@ -261,6 +271,7 @@ var hotInitCode = Template.getFunctionContent(function() {
261271
_disposeHandlers: [],
262272

263273
// Module API
274+
active: true,
264275
accept: function(dep, callback) {
265276
if(typeof dep === "undefined")
266277
hot._selfAccepted = true;
@@ -528,6 +539,9 @@ var hotInitCode = Template.getFunctionContent(function() {
528539
}
529540
hotCurrentModuleData[moduleId] = data;
530541

542+
// disable module (this disables requires from this module)
543+
module.hot.active = false;
544+
531545
// remove module from cache
532546
delete installedModules[moduleId];
533547

@@ -600,7 +614,7 @@ var hotInitCode = Template.getFunctionContent(function() {
600614
for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) {
601615
var item = outdatedSelfAcceptedModules[i];
602616
var moduleId = item.module;
603-
hotCurrentParent = moduleId;
617+
hotCurrentParents = [moduleId];
604618
try {
605619
$require$(moduleId);
606620
} catch(err) {

0 commit comments

Comments
 (0)