diff --git a/lib/FlagDependencyExportsPlugin.js b/lib/FlagDependencyExportsPlugin.js index 0aafb0b4aa2..d3eb7d49e3f 100644 --- a/lib/FlagDependencyExportsPlugin.js +++ b/lib/FlagDependencyExportsPlugin.js @@ -32,6 +32,7 @@ class FlagDependencyExportsPlugin { let module; let moduleWithExports; let moduleProvidedExports; + let providedExportsAreTemporary; const processDependenciesBlock = depBlock => { for (const dep of depBlock.dependencies) { @@ -72,6 +73,7 @@ class FlagDependencyExportsPlugin { // store dependencies const exportDeps = exportDesc.dependencies; if (exportDeps) { + providedExportsAreTemporary = true; for (const exportDependency of exportDeps) { // add dependency for this module const set = dependencies.get(exportDependency); @@ -96,7 +98,12 @@ class FlagDependencyExportsPlugin { // Start with all modules without provided exports for (const module of modules) { - if (!module.buildMeta.providedExports) { + if (module.buildInfo.temporaryProvidedExports) { + // Clear exports when they are temporary + // and recreate them + module.buildMeta.providedExports = null; + queue.enqueue(module); + } else if (!module.buildMeta.providedExports) { queue.enqueue(module); } } @@ -112,7 +119,9 @@ class FlagDependencyExportsPlugin { ) ? new Set(module.buildMeta.providedExports) : new Set(); + providedExportsAreTemporary = false; processDependenciesBlock(module); + module.buildInfo.temporaryProvidedExports = providedExportsAreTemporary; if (!moduleWithExports) { module.buildMeta.providedExports = true; notifyDependencies(); diff --git a/test/watchCases/parsing/reexport-chain/0/a.js b/test/watchCases/parsing/reexport-chain/0/a.js new file mode 100644 index 00000000000..14065b7bb3f --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/0/a.js @@ -0,0 +1 @@ +export * from "./b"; diff --git a/test/watchCases/parsing/reexport-chain/0/b.js b/test/watchCases/parsing/reexport-chain/0/b.js new file mode 100644 index 00000000000..6531c232656 --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/0/b.js @@ -0,0 +1 @@ +export * from "./c"; diff --git a/test/watchCases/parsing/reexport-chain/0/c.js b/test/watchCases/parsing/reexport-chain/0/c.js new file mode 100644 index 00000000000..3328d2923cf --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/0/c.js @@ -0,0 +1 @@ +export var x0 = "0"; diff --git a/test/watchCases/parsing/reexport-chain/0/index.js b/test/watchCases/parsing/reexport-chain/0/index.js new file mode 100644 index 00000000000..895d77f1ec8 --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/0/index.js @@ -0,0 +1,12 @@ +import * as a from "./a"; + +const nsObj = m => { + Object.defineProperty(m, Symbol.toStringTag, { value: "Module" }); + return m; +}; + +it("should have to correct exports", () => { + expect(a).toEqual(nsObj({ + [`x${WATCH_STEP}`]: WATCH_STEP + })); +}) diff --git a/test/watchCases/parsing/reexport-chain/1/c.js b/test/watchCases/parsing/reexport-chain/1/c.js new file mode 100644 index 00000000000..e6f97c0bbdf --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/1/c.js @@ -0,0 +1 @@ +export var x1 = "1"; diff --git a/test/watchCases/parsing/reexport-chain/2/a.js b/test/watchCases/parsing/reexport-chain/2/a.js new file mode 100644 index 00000000000..6531c232656 --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/2/a.js @@ -0,0 +1 @@ +export * from "./c"; diff --git a/test/watchCases/parsing/reexport-chain/2/c.js b/test/watchCases/parsing/reexport-chain/2/c.js new file mode 100644 index 00000000000..7b519b5f4a3 --- /dev/null +++ b/test/watchCases/parsing/reexport-chain/2/c.js @@ -0,0 +1 @@ +export var x2 = "2"; diff --git a/yarn.lock b/yarn.lock index 43ea066d9e2..3611f6d49fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5823,6 +5823,7 @@ p-try@^1.0.0: p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== pako@~1.0.5: version "1.0.6" @@ -6579,6 +6580,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1"