@@ -44,22 +44,31 @@ const MiniCssExtractPlugin = require("./index");
4444 * @returns {string }
4545 */
4646function hotLoader ( content , context ) {
47- const accept = context . locals
48- ? ""
49- : "module.hot.accept(undefined, cssReload);" ;
50-
47+ const localsJsonString = JSON . stringify ( JSON . stringify ( context . locals ) ) ;
5148 return `${ content }
5249 if(module.hot) {
53- // ${ Date . now ( ) }
54- var cssReload = require(${ stringifyRequest (
55- context . loaderContext ,
56- path . join ( __dirname , "hmr/hotModuleReplacement.js" )
57- ) } )(module.id, ${ JSON . stringify ( {
58- ...context . options ,
59- locals : ! ! context . locals ,
60- } ) } );
61- module.hot.dispose(cssReload);
62- ${ accept }
50+ (function() {
51+ var localsJsonString = ${ localsJsonString } ;
52+ // ${ Date . now ( ) }
53+ var cssReload = require(${ stringifyRequest (
54+ context . loaderContext ,
55+ path . join ( __dirname , "hmr/hotModuleReplacement.js" )
56+ ) } )(module.id, ${ JSON . stringify ( context . options ) } );
57+ // only invalidate when locals change
58+ if (
59+ module.hot.data &&
60+ module.hot.data.value &&
61+ module.hot.data.value !== localsJsonString
62+ ) {
63+ module.hot.invalidate();
64+ } else {
65+ module.hot.accept();
66+ }
67+ module.hot.dispose(function(data) {
68+ data.value = localsJsonString;
69+ cssReload();
70+ });
71+ })();
6372 }
6473 ` ;
6574}
@@ -563,3 +572,4 @@ function loader(content) {
563572
564573module . exports = loader ;
565574module . exports . pitch = pitch ;
575+ module . exports . hotLoader = hotLoader ;
0 commit comments