File tree Expand file tree Collapse file tree 4 files changed +49
-0
lines changed Expand file tree Collapse file tree 4 files changed +49
-0
lines changed Original file line number Diff line number Diff line change @@ -108,11 +108,19 @@ function updateCss(el, url) {
108108 newEl . isLoaded = false ;
109109
110110 newEl . addEventListener ( 'load' , ( ) => {
111+ if ( newEl . isLoaded ) {
112+ return ;
113+ }
114+
111115 newEl . isLoaded = true ;
112116 el . parentNode . removeChild ( el ) ;
113117 } ) ;
114118
115119 newEl . addEventListener ( 'error' , ( ) => {
120+ if ( newEl . isLoaded ) {
121+ return ;
122+ }
123+
116124 newEl . isLoaded = true ;
117125 el . parentNode . removeChild ( el ) ;
118126 } ) ;
Original file line number Diff line number Diff line change @@ -306,4 +306,29 @@ describe('HMR', () => {
306306 done ( ) ;
307307 } , 100 ) ;
308308 } ) ;
309+
310+ it ( 'should not remove old link when new link is loaded twice' , ( done ) => {
311+ const link = document . createElement ( 'link' ) ;
312+
313+ link . innerHTML = '<link rel="preload stylesheet" href="./dist/main.css" />' ;
314+ document . head . appendChild ( link ) ;
315+ document . head . removeChild = jest . fn ( ) ;
316+
317+ const update = hotModuleReplacement ( './dist/main.css' , { } ) ;
318+
319+ update ( ) ;
320+
321+ setTimeout ( ( ) => {
322+ const links = Array . prototype . slice . call (
323+ document . querySelectorAll ( 'link' )
324+ ) ;
325+
326+ links [ 1 ] . dispatchEvent ( getLoadEvent ( ) ) ;
327+ links [ 1 ] . dispatchEvent ( getLoadEvent ( ) ) ;
328+
329+ expect ( document . head . removeChild ) . toHaveBeenCalledTimes ( 1 ) ;
330+
331+ done ( ) ;
332+ } , 100 ) ;
333+ } ) ;
309334} ) ;
Original file line number Diff line number Diff line change @@ -987,11 +987,19 @@ function updateCss(el, url) {
987987 newEl . isLoaded = false ;
988988
989989 newEl . addEventListener ( 'load' , ( ) => {
990+ if ( newEl . isLoaded ) {
991+ return ;
992+ }
993+
990994 newEl . isLoaded = true ;
991995 el . parentNode . removeChild ( el ) ;
992996 } ) ;
993997
994998 newEl . addEventListener ( 'error' , ( ) => {
999+ if ( newEl . isLoaded ) {
1000+ return ;
1001+ }
1002+
9951003 newEl . isLoaded = true ;
9961004 el . parentNode . removeChild ( el ) ;
9971005 } ) ;
Original file line number Diff line number Diff line change @@ -129,11 +129,19 @@ function updateCss(el, url) {
129129 newEl . isLoaded = false ;
130130
131131 newEl . addEventListener ( 'load' , ( ) => {
132+ if ( newEl . isLoaded ) {
133+ return ;
134+ }
135+
132136 newEl . isLoaded = true ;
133137 el . parentNode . removeChild ( el ) ;
134138 } ) ;
135139
136140 newEl . addEventListener ( 'error' , ( ) => {
141+ if ( newEl . isLoaded ) {
142+ return ;
143+ }
144+
137145 newEl . isLoaded = true ;
138146 el . parentNode . removeChild ( el ) ;
139147 } ) ;
You can’t perform that action at this time.
0 commit comments