diff --git a/lib/FlagDependencyExportsPlugin.js b/lib/FlagDependencyExportsPlugin.js index a1813bc27..ef22941ab 100644 --- a/lib/FlagDependencyExportsPlugin.js +++ b/lib/FlagDependencyExportsPlugin.js @@ -59,17 +59,19 @@ FlagDependencyExportsPlugin.prototype.apply = function(compiler) { }); } var changed = false; - if(exports === true) { - module.providedExports = true; - changed = true; - } else if(Array.isArray(exports)) { - if(Array.isArray(module.providedExports)) { - changed = addToSet(module.providedExports, exports); - } else { - module.providedExports = exports.slice(); + if(module.providedExports !== true) { + if(exports === true) { + module.providedExports = true; changed = true; - } - }; + } else if(Array.isArray(exports)) { + if(Array.isArray(module.providedExports)) { + changed = addToSet(module.providedExports, exports); + } else { + module.providedExports = exports.slice(); + changed = true; + } + }; + } if(changed) { var deps = dependencies["$" + module.identifier()]; if(deps) { diff --git a/test/statsCases/tree-shaking/a.js b/test/statsCases/tree-shaking/a.js new file mode 100644 index 000000000..cb4174a1e --- /dev/null +++ b/test/statsCases/tree-shaking/a.js @@ -0,0 +1 @@ +export var a; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/b.js b/test/statsCases/tree-shaking/b.js new file mode 100644 index 000000000..659a403c6 --- /dev/null +++ b/test/statsCases/tree-shaking/b.js @@ -0,0 +1 @@ +export var b; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/expected.txt b/test/statsCases/tree-shaking/expected.txt new file mode 100644 index 000000000..c390abde9 --- /dev/null +++ b/test/statsCases/tree-shaking/expected.txt @@ -0,0 +1,25 @@ +Hash: 11b123cb23c353a91fe4 +Time: Xms + Asset Size Chunks Chunk Names +bundle.js 6.46 kB 0 [emitted] main +chunk {0} bundle.js (main) 512 bytes [entry] [rendered] + [0] (webpack)/test/statsCases/tree-shaking/a.js 13 bytes {0} [built] + [exports: a] + [only some exports used: a] + [1] (webpack)/test/statsCases/tree-shaking/b.js 13 bytes {0} [built] + [exports: b] + [only some exports used: ] + [2] (webpack)/test/statsCases/tree-shaking/unknown.js 0 bytes {0} [built] + [only some exports used: a, c] + [3] (webpack)/test/statsCases/tree-shaking/reexport-known.js 49 bytes {0} [built] + [exports: a, b] + [only some exports used: a] + [4] (webpack)/test/statsCases/tree-shaking/reexport-star-known.js 41 bytes {0} [built] + [exports: a, b] + [only some exports used: a] + [5] (webpack)/test/statsCases/tree-shaking/reexport-star-unknown.js 68 bytes {0} [built] + [only some exports used: a, c] + [6] (webpack)/test/statsCases/tree-shaking/reexport-unknown.js 83 bytes {0} [built] + [exports: a, b, c, d] + [only some exports used: a, c] + [7] (webpack)/test/statsCases/tree-shaking/index.js 245 bytes {0} [built] \ No newline at end of file diff --git a/test/statsCases/tree-shaking/index.js b/test/statsCases/tree-shaking/index.js new file mode 100644 index 000000000..74ed853e8 --- /dev/null +++ b/test/statsCases/tree-shaking/index.js @@ -0,0 +1,6 @@ +import { a as a1 } from "./reexport-known"; +import { a as a2, c as c2 } from "./reexport-unknown"; +import { a as a3} from "./reexport-star-known"; +import { a as a4, c as c4 } from "./reexport-star-unknown"; + +console.log(a1, a2, a3, a4, c2, c4); diff --git a/test/statsCases/tree-shaking/reexport-known.js b/test/statsCases/tree-shaking/reexport-known.js new file mode 100644 index 000000000..1a215e424 --- /dev/null +++ b/test/statsCases/tree-shaking/reexport-known.js @@ -0,0 +1,2 @@ +export { a } from "./a"; +export { b } from "./b"; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/reexport-star-known.js b/test/statsCases/tree-shaking/reexport-star-known.js new file mode 100644 index 000000000..281c96ee9 --- /dev/null +++ b/test/statsCases/tree-shaking/reexport-star-known.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/reexport-star-unknown.js b/test/statsCases/tree-shaking/reexport-star-unknown.js new file mode 100644 index 000000000..fc0528c52 --- /dev/null +++ b/test/statsCases/tree-shaking/reexport-star-unknown.js @@ -0,0 +1,3 @@ +export * from "./a"; +export * from "./b"; +export * from "./unknown"; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/reexport-unknown.js b/test/statsCases/tree-shaking/reexport-unknown.js new file mode 100644 index 000000000..8c5b800de --- /dev/null +++ b/test/statsCases/tree-shaking/reexport-unknown.js @@ -0,0 +1,3 @@ +export { a } from "./a"; +export { b } from "./b"; +export { c, d } from "./unknown"; \ No newline at end of file diff --git a/test/statsCases/tree-shaking/unknown.js b/test/statsCases/tree-shaking/unknown.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/statsCases/tree-shaking/webpack.config.js b/test/statsCases/tree-shaking/webpack.config.js new file mode 100644 index 000000000..c26b3d220 --- /dev/null +++ b/test/statsCases/tree-shaking/webpack.config.js @@ -0,0 +1,12 @@ +module.exports = { + entry: "./index", + output: { + filename: "bundle.js" + }, + stats: { + chunkModules: false, + modules: true, + providedExports: true, + usedExports: true + } +}; \ No newline at end of file