From 6410fb871452835998baa5a497d304c4a0307695 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Tue, 31 Jul 2018 10:28:10 -0400 Subject: [PATCH] Disable client-side treeshaking when BuildOption is used When the BuildOption `treeShaking: false` is provided, also disable client-side tree shaking by setting the `treeShaking: false` config on the Loader. Fixes #1058 --- lib/assign_default_options.js | 5 +++ test/tree_shaking_test.js | 45 ++++++++++++++++++++ test/treeshake/multimain/es/lib-ajax.js | 1 + test/treeshake/multimain/es/lib-component.js | 1 + test/treeshake/multimain/es/lib-map.js | 1 + test/treeshake/multimain/es/lib/ajax.js | 6 +++ test/treeshake/multimain/es/lib/component.js | 6 +++ test/treeshake/multimain/es/lib/map.js | 6 +++ test/treeshake/multimain/lib-core.js | 2 + test/treeshake/multimain/lib-ecosystem.js | 1 + test/treeshake/multimain/lib.js | 2 + test/treeshake/multimain/main1.js | 4 ++ test/treeshake/multimain/main2.js | 4 ++ test/treeshake/multimain/package.json | 5 +++ test/treeshake/multimain/prod1.html | 11 +++++ 15 files changed, 100 insertions(+) create mode 100644 test/treeshake/multimain/es/lib-ajax.js create mode 100644 test/treeshake/multimain/es/lib-component.js create mode 100644 test/treeshake/multimain/es/lib-map.js create mode 100644 test/treeshake/multimain/es/lib/ajax.js create mode 100644 test/treeshake/multimain/es/lib/component.js create mode 100644 test/treeshake/multimain/es/lib/map.js create mode 100644 test/treeshake/multimain/lib-core.js create mode 100644 test/treeshake/multimain/lib-ecosystem.js create mode 100644 test/treeshake/multimain/lib.js create mode 100644 test/treeshake/multimain/main1.js create mode 100644 test/treeshake/multimain/main2.js create mode 100644 test/treeshake/multimain/package.json create mode 100644 test/treeshake/multimain/prod1.html diff --git a/lib/assign_default_options.js b/lib/assign_default_options.js index fe92072e..62c91d94 100644 --- a/lib/assign_default_options.js +++ b/lib/assign_default_options.js @@ -44,6 +44,11 @@ module.exports = function(config, options){ throw new Error("bundlesPath has been removed. Use dest instead: http://stealjs.com/docs/steal-tools.BuildOptions.html"); } + // Tree-shaking + if(options.treeShaking === false) { + config.treeShaking = false; + } + // package.json!npm is now the default if(!config.config && !config.configMain) { config.configMain = "package.json!npm"; diff --git a/test/tree_shaking_test.js b/test/tree_shaking_test.js index e7913563..400e74d4 100644 --- a/test/tree_shaking_test.js +++ b/test/tree_shaking_test.js @@ -179,6 +179,51 @@ describe("Tree-shaking", function(){ assert.equal(typeof dep.two, "function", "Included"); }); }); + + describe("With a multi-main project", function(){ + var app; + before(function(done){ + this.timeout(20000); + var base = path.join(__dirname, "treeshake", "multimain"); + var config = { + config: path.join(base, "package.json!npm"), + main: [ + "~/main1", + "~/main2" + ] + }; + var page = `prod1.html`; + + rmdir(path.join(base, "dist")) + .then(function() { + return optimize(config, { + quiet: true, + minify: false, + treeShaking: false + }); + }) + .then(function() { + var close; + return open(path.join("test", "treeshake", "multimain", page)) + .then(function(args) { + close = args.close; + browser = args.browser; + return find(browser, "globals"); + }) + .then(function(mod) { + app = mod; + close(); + done(); + }); + }) + .catch(done); + }); + + it("Doesn\'t tree shake modules", function(){ + let Component = app.Component; + assert.equal(typeof Component, "function", "was not tree-shaken"); + }); + }); }); describe("Bundles", function() { diff --git a/test/treeshake/multimain/es/lib-ajax.js b/test/treeshake/multimain/es/lib-ajax.js new file mode 100644 index 00000000..77a68419 --- /dev/null +++ b/test/treeshake/multimain/es/lib-ajax.js @@ -0,0 +1 @@ +export {default} from "./lib/ajax"; diff --git a/test/treeshake/multimain/es/lib-component.js b/test/treeshake/multimain/es/lib-component.js new file mode 100644 index 00000000..fa147b6d --- /dev/null +++ b/test/treeshake/multimain/es/lib-component.js @@ -0,0 +1 @@ +export {default} from "./lib/component"; diff --git a/test/treeshake/multimain/es/lib-map.js b/test/treeshake/multimain/es/lib-map.js new file mode 100644 index 00000000..f609727f --- /dev/null +++ b/test/treeshake/multimain/es/lib-map.js @@ -0,0 +1 @@ +export {default} from "./lib/map"; diff --git a/test/treeshake/multimain/es/lib/ajax.js b/test/treeshake/multimain/es/lib/ajax.js new file mode 100644 index 00000000..08bb6bc2 --- /dev/null +++ b/test/treeshake/multimain/es/lib/ajax.js @@ -0,0 +1,6 @@ + +function ajax() { + +} + +module.exports = ajax; diff --git a/test/treeshake/multimain/es/lib/component.js b/test/treeshake/multimain/es/lib/component.js new file mode 100644 index 00000000..77e67bd1 --- /dev/null +++ b/test/treeshake/multimain/es/lib/component.js @@ -0,0 +1,6 @@ + +class Component { + +} + +module.exports = Component; diff --git a/test/treeshake/multimain/es/lib/map.js b/test/treeshake/multimain/es/lib/map.js new file mode 100644 index 00000000..c5445a31 --- /dev/null +++ b/test/treeshake/multimain/es/lib/map.js @@ -0,0 +1,6 @@ + +class Map { + +} + +module.exports = Map; diff --git a/test/treeshake/multimain/lib-core.js b/test/treeshake/multimain/lib-core.js new file mode 100644 index 00000000..ff4fb06b --- /dev/null +++ b/test/treeshake/multimain/lib-core.js @@ -0,0 +1,2 @@ +export { default as Component } from "./es/lib-component"; +export { default as Map } from "./es/lib-map"; diff --git a/test/treeshake/multimain/lib-ecosystem.js b/test/treeshake/multimain/lib-ecosystem.js new file mode 100644 index 00000000..4e39c0de --- /dev/null +++ b/test/treeshake/multimain/lib-ecosystem.js @@ -0,0 +1 @@ +export { default as ajax } from "./es/lib-ajax"; diff --git a/test/treeshake/multimain/lib.js b/test/treeshake/multimain/lib.js new file mode 100644 index 00000000..d51c0e09 --- /dev/null +++ b/test/treeshake/multimain/lib.js @@ -0,0 +1,2 @@ +export * from "./lib-core.js"; +export * from "./lib-ecosystem.js"; diff --git a/test/treeshake/multimain/main1.js b/test/treeshake/multimain/main1.js new file mode 100644 index 00000000..f818494c --- /dev/null +++ b/test/treeshake/multimain/main1.js @@ -0,0 +1,4 @@ +import { Component } from "./lib"; + +window.globals = window.globals || {}; +window.globals.Component = Component; diff --git a/test/treeshake/multimain/main2.js b/test/treeshake/multimain/main2.js new file mode 100644 index 00000000..7886171f --- /dev/null +++ b/test/treeshake/multimain/main2.js @@ -0,0 +1,4 @@ +import { Map } from "./lib"; + +window.globals = window.globals || {}; +window.globals.Map = Map; diff --git a/test/treeshake/multimain/package.json b/test/treeshake/multimain/package.json new file mode 100644 index 00000000..74247982 --- /dev/null +++ b/test/treeshake/multimain/package.json @@ -0,0 +1,5 @@ +{ + "name": "treeshake", + "main": "main.js", + "version": "1.0.0" +} diff --git a/test/treeshake/multimain/prod1.html b/test/treeshake/multimain/prod1.html new file mode 100644 index 00000000..a152f05a --- /dev/null +++ b/test/treeshake/multimain/prod1.html @@ -0,0 +1,11 @@ + + + + + Title + + + + + +