webpack 2 brings native support ES6 Modules. This means webpack now understands import and export without them being transformed to CommonJS:
The ES6 Loader spec defines System.import as method to load ES6 Modules dynamically on runtime.
Webpack threads System.import as splitpoint and puts the requested module in a separate chunk.
System.import takes the module name as argument and returns a Promise.
Good news: Failure to load a chunk can be handled now.
It's possible to pass an partial expression to System.import. This is handled similar to expressions in CommonJs (webpack creates a context with all possible files).
System.import creates a separate chunk for each possible module.
The es2015 babel preset transforms ES6 Modules to CommonJs by default. To use webpack to process ES6 Modules you should use the es2015-webpack preset instead.
ES6 specific optimizations
The static nature of ES6 Modules allows some new kind of optimizations. In example in many cases it's possible to detect which exports are used and which aren't used.
In cases in which webpack can say for sure that an export isn't used it omits the statement which exposes the export to other modules. Later the minimizer may flag the declaration as unused and omits it.