Hi Isaac,<div><br></div><div>I share some of your concerns as well.  I like the idea of "import" just returning an object, which can be destructured using let.  I also like the idea of eliminating the "import *" syntax.  However, I think that dynamic exports ("export <expression>") might not be as useful as it seems.</div>
<div><br></div><div>In my modules, I use the "export <expression>" form for the following reasons:</div><div><br></div><div>1.  When I want to export a single function (perhaps a constructor), and I don't want importers to unnecessarily repeat the function name:</div>
<div><br></div><div>    var MyClass = require("MyClass").MyClass; // Boo!</div><div>    var MyClass = require("MyClass"); // Better!</div><div><br></div><div>2.  When I want to rename an export:</div><div>
<br></div><div>    function shortName() { ... }</div><div><br></div><div>    module.exports = { longName: shortName };</div><div><br></div><div>3.  When I want to group together the exported API, instead of having it spread across the file:</div>
<div><br></div><div>    function A() { ... }</div><div>    function B() { ... }</div><div>    function C() { ... }</div><div><br></div><div>    module.exports = { A: A, B: B, C: C };</div><div><br></div><div>For case 1, destructuring allows us to eliminate the repetition:</div>
<div><br></div><div>    let { MyClass } = import "MyClass.js";</div><div><br></div><div>A static multiple export syntax ("export { ... }") would work just fine for cases 2 and 3:</div><div><br></div><div>
    export {</div><div>      longName: shortName,</div><div>      A,</div><div>      B,</div><div>      C</div><div>    };</div><div><br></div><div>Are there any other cases where dynamic exports are useful?</div><div><br>
</div><div>- Kevin</div><div><br></div>