From 46b428b9d9f946bfb65f68a7899d96e09b8c8e38 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 May 2019 09:25:05 +0200 Subject: [PATCH] fix rejection when removing and readding self-accepted module fixes #9198 Co-authored-by: rixo --- lib/HotModuleReplacement.runtime.js | 11 ++++++---- .../index.js | 20 +++++++++++++++++++ .../inner.js | 3 +++ .../module.js | 9 +++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 test/hotCases/recover/recover-after-removal-self-accepted/index.js create mode 100644 test/hotCases/recover/recover-after-removal-self-accepted/inner.js create mode 100644 test/hotCases/recover/recover-after-removal-self-accepted/module.js diff --git a/lib/HotModuleReplacement.runtime.js b/lib/HotModuleReplacement.runtime.js index 5497091c817..5756623e629 100644 --- a/lib/HotModuleReplacement.runtime.js +++ b/lib/HotModuleReplacement.runtime.js @@ -290,7 +290,7 @@ module.exports = function() { var outdatedModules = [updateModuleId]; var outdatedDependencies = {}; - var queue = outdatedModules.slice().map(function(id) { + var queue = outdatedModules.map(function(id) { return { chain: [id], id: id @@ -467,12 +467,15 @@ module.exports = function() { moduleId = outdatedModules[i]; if ( installedModules[moduleId] && - installedModules[moduleId].hot._selfAccepted - ) + installedModules[moduleId].hot._selfAccepted && + // removed self-accepted modules should not be required + appliedUpdate[moduleId] !== warnUnexpectedRequire + ) { outdatedSelfAcceptedModules.push({ module: moduleId, errorHandler: installedModules[moduleId].hot._selfAccepted }); + } } // Now in "dispose" phase @@ -539,7 +542,7 @@ module.exports = function() { } } - // Not in "apply" phase + // Now in "apply" phase hotSetStatus("apply"); hotCurrentHash = hotUpdateNewHash; diff --git a/test/hotCases/recover/recover-after-removal-self-accepted/index.js b/test/hotCases/recover/recover-after-removal-self-accepted/index.js new file mode 100644 index 00000000000..9a7ca9e5680 --- /dev/null +++ b/test/hotCases/recover/recover-after-removal-self-accepted/index.js @@ -0,0 +1,20 @@ +import ok from "./module"; + +it("should abort when module is not accepted", done => { + expect(ok).toBe("ok1-inner"); + NEXT( + require("../../update")(done, true, () => { + expect(ok).toBe("ok2"); + NEXT( + require("../../update")(done, true, () => { + expect(ok).toBe("ok3-inner"); + done(); + }) + ); + }) + ); +}); + +if (module.hot) { + module.hot.accept("./module"); +} diff --git a/test/hotCases/recover/recover-after-removal-self-accepted/inner.js b/test/hotCases/recover/recover-after-removal-self-accepted/inner.js new file mode 100644 index 00000000000..8902ee1b3d4 --- /dev/null +++ b/test/hotCases/recover/recover-after-removal-self-accepted/inner.js @@ -0,0 +1,3 @@ +module.hot.accept(); + +export default "-inner"; diff --git a/test/hotCases/recover/recover-after-removal-self-accepted/module.js b/test/hotCases/recover/recover-after-removal-self-accepted/module.js new file mode 100644 index 00000000000..de7faaf2a9e --- /dev/null +++ b/test/hotCases/recover/recover-after-removal-self-accepted/module.js @@ -0,0 +1,9 @@ +import inner from "./inner"; + +export default "ok1" + inner; +--- +export default "ok2"; +--- +import inner from "./inner"; + +export default "ok3" + inner;