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);
});