1. What if I want to have my module be a function, the way that $ in jQuery is both a function and a namespace for the rest of the functionality?
This is an important use case, and so we're going to support it in ES6 modules. You'll be able to say:
module $ at "http://jquery.com/jquery.min.js";
$(...)
$.ajax(...)
2. Modules will requiring using names without the prefix.This isn't true. As you can see in the above example, you can just use $ directly, even though it's a module. You can also say:
import ajax from $;
but you don't have to.3. We should just standardize the node module system.
Of course, there are many different module systems being used in JS code right now, and we could just pick one. Unfortunately, we couldn't just pick the node module system, since it's fundamentally synchronous, which is great on the server side but not in the browser.
However, we feel that we can bring real advantages to JS programmers by extending the language -- we can simplify using modules, we can make some patterns direct that currently have to be written using callbacks, we can better support encapsulation, and we can allow engines to use knowledge about modules for optimization.
3. Static analysis is doable even without a static module system.
The static analysis you describe, while useful, isn't going to tell an engine statically where it can go to lookup references to an export from a module. That means it's not useful for many of the optimizations that we want to enable. Additionally, your analysis isn't sound -- it can miss uses of `require` that are generated dynamically, for example. Again, that means that engines can't use it for optimization.
Finally, if you have comments about ES development, I strongly encourage you to make them on es-discuss, rather than on HN, where they are more likely to have an impact on the development of the language.