File tree 4 files changed +49
-0
lines changed
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) {
108
108
newEl . isLoaded = false ;
109
109
110
110
newEl . addEventListener ( 'load' , ( ) => {
111
+ if ( newEl . isLoaded ) {
112
+ return ;
113
+ }
114
+
111
115
newEl . isLoaded = true ;
112
116
el . parentNode . removeChild ( el ) ;
113
117
} ) ;
114
118
115
119
newEl . addEventListener ( 'error' , ( ) => {
120
+ if ( newEl . isLoaded ) {
121
+ return ;
122
+ }
123
+
116
124
newEl . isLoaded = true ;
117
125
el . parentNode . removeChild ( el ) ;
118
126
} ) ;
Original file line number Diff line number Diff line change @@ -306,4 +306,29 @@ describe('HMR', () => {
306
306
done ( ) ;
307
307
} , 100 ) ;
308
308
} ) ;
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
+ } ) ;
309
334
} ) ;
Original file line number Diff line number Diff line change @@ -987,11 +987,19 @@ function updateCss(el, url) {
987
987
newEl . isLoaded = false ;
988
988
989
989
newEl . addEventListener ( 'load' , ( ) => {
990
+ if ( newEl . isLoaded ) {
991
+ return ;
992
+ }
993
+
990
994
newEl . isLoaded = true ;
991
995
el . parentNode . removeChild ( el ) ;
992
996
} ) ;
993
997
994
998
newEl . addEventListener ( 'error' , ( ) => {
999
+ if ( newEl . isLoaded ) {
1000
+ return ;
1001
+ }
1002
+
995
1003
newEl . isLoaded = true ;
996
1004
el . parentNode . removeChild ( el ) ;
997
1005
} ) ;
Original file line number Diff line number Diff line change @@ -129,11 +129,19 @@ function updateCss(el, url) {
129
129
newEl . isLoaded = false ;
130
130
131
131
newEl . addEventListener ( 'load' , ( ) => {
132
+ if ( newEl . isLoaded ) {
133
+ return ;
134
+ }
135
+
132
136
newEl . isLoaded = true ;
133
137
el . parentNode . removeChild ( el ) ;
134
138
} ) ;
135
139
136
140
newEl . addEventListener ( 'error' , ( ) => {
141
+ if ( newEl . isLoaded ) {
142
+ return ;
143
+ }
144
+
137
145
newEl . isLoaded = true ;
138
146
el . parentNode . removeChild ( el ) ;
139
147
} ) ;
You can’t perform that action at this time.
0 commit comments