@@ -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