From da45e781cf48eec8e6a09979140484e021bea7f3 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 26 Jan 2021 18:16:06 +0100 Subject: [PATCH 1/2] test(hmr) expect old link not removed twice --- test/HMR.test.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/HMR.test.js b/test/HMR.test.js index 6a2f0067..e049ae13 100644 --- a/test/HMR.test.js +++ b/test/HMR.test.js @@ -306,4 +306,31 @@ describe('HMR', () => { done(); }, 100); }); + + it('should not remove old link when new link is loaded twice', (done) => { + + const link = document.createElement('link'); + + link.innerHTML = ''; + document.head.appendChild(link); + document.head.removeChild = jest.fn(); + + const update = hotModuleReplacement('./dist/main.css', {}); + + update(); + + setTimeout(() => { + + const links = Array.prototype.slice.call( + document.querySelectorAll('link') + ); + + links[1].dispatchEvent(getLoadEvent()); + links[1].dispatchEvent(getLoadEvent()); + + expect(document.head.removeChild).toHaveBeenCalledTimes(1); + + done(); + }, 100); + }); }); From cceeafd7fe28eb25e2643de0b861fba775357eda Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 26 Jan 2021 18:17:40 +0100 Subject: [PATCH 2/2] fix(hmr) Prevent error from removing preloaded stylesheet link twice (#682) --- src/hmr/hotModuleReplacement.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hmr/hotModuleReplacement.js b/src/hmr/hotModuleReplacement.js index c5b1bbfd..dee34937 100644 --- a/src/hmr/hotModuleReplacement.js +++ b/src/hmr/hotModuleReplacement.js @@ -108,6 +108,7 @@ function updateCss(el, url) { newEl.isLoaded = false; newEl.addEventListener('load', () => { + if (newEl.isLoaded) return; newEl.isLoaded = true; el.parentNode.removeChild(el); });