show warning when using HMR incorrectly

fixed #480
This commit is contained in:
Tobias Koppers 2014-09-17 23:23:45 +02:00
parent 4891225efc
commit 636d97e180
1 changed files with 24 additions and 10 deletions

View File

@ -152,7 +152,7 @@ HotModuleReplacementPlugin.prototype.apply = function(compiler) {
return this.asString([ return this.asString([
source + ",", source + ",",
"hot: hotCreateModule(" + varModuleId + "),", "hot: hotCreateModule(" + varModuleId + "),",
"parents: [hotCurrentParent],", "parents: hotCurrentParents,",
"children: []" "children: []"
]); ]);
}); });
@ -211,20 +211,30 @@ var hotInitCode = Template.getFunctionContent(function() {
var hotApplyOnUpdate = true; var hotApplyOnUpdate = true;
var hotCurrentHash = $hash$; var hotCurrentHash = $hash$;
var hotCurrentModuleData = {}; var hotCurrentModuleData = {};
var hotCurrentParent = 0; var hotCurrentParents = [];
function hotCreateRequire(moduleId) { function hotCreateRequire(moduleId) {
var me = installedModules[moduleId]; var me = installedModules[moduleId];
if(!me) return $require$;
var fn = function(request) { var fn = function(request) {
if(installedModules[request] && installedModules[request].parents.indexOf(moduleId) < 0) if(me.hot.active) {
installedModules[request].parents.push(moduleId); if(installedModules[request]) {
if(me && me.children.indexOf(request) < 0) if(installedModules[request].parents.indexOf(moduleId) < 0)
me.children.push(request); installedModules[request].parents.push(moduleId);
hotCurrentParent = moduleId; if(me.children.indexOf(request) < 0)
me.children.push(request);
} else hotCurrentParents = [moduleId];
} else {
console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId);
hotCurrentParents = [];
}
return $require$(request); return $require$(request);
}; };
for(var name in $require$) for(var name in $require$) {
fn[name] = $require$[name]; if(Object.prototype.hasOwnProperty.call($require$, name)) {
fn[name] = $require$[name];
}
}
fn.e = function(chunkId, callback) { fn.e = function(chunkId, callback) {
if(hotStatus === "ready") if(hotStatus === "ready")
hotSetStatus("prepare"); hotSetStatus("prepare");
@ -261,6 +271,7 @@ var hotInitCode = Template.getFunctionContent(function() {
_disposeHandlers: [], _disposeHandlers: [],
// Module API // Module API
active: true,
accept: function(dep, callback) { accept: function(dep, callback) {
if(typeof dep === "undefined") if(typeof dep === "undefined")
hot._selfAccepted = true; hot._selfAccepted = true;
@ -528,6 +539,9 @@ var hotInitCode = Template.getFunctionContent(function() {
} }
hotCurrentModuleData[moduleId] = data; hotCurrentModuleData[moduleId] = data;
// disable module (this disables requires from this module)
module.hot.active = false;
// remove module from cache // remove module from cache
delete installedModules[moduleId]; delete installedModules[moduleId];
@ -600,7 +614,7 @@ var hotInitCode = Template.getFunctionContent(function() {
for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) { for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) {
var item = outdatedSelfAcceptedModules[i]; var item = outdatedSelfAcceptedModules[i];
var moduleId = item.module; var moduleId = item.module;
hotCurrentParent = moduleId; hotCurrentParents = [moduleId];
try { try {
$require$(moduleId); $require$(moduleId);
} catch(err) { } catch(err) {