- Early work by Ihab Awad (Google) and Kris Kowal (FastSoft)
- 2009-09: 2nd draft of module strawman, still very close to "closures as modules",
export x = 42 - 2010-10: Simple modules, module blocks,
module M { export var x = 42; } - 2012-02: V8 implements original module spec (inline module blocks!)
- 2014-09: WHATWG officially starts an ES6 loader spec
- 2015-01: V8 starts implementing the revised module spec ("modules as a different top-level parse goal")
- 2015-06: ES2015 brings static
import/exportsbut actual loading left open to hosts - 2016-01: WHATWG specs loading of relative and absolute paths as part of
<script type="module"> - 2016-09: Dynamic
import()is born (ability to dynamically load modules) - 2017-01: WHATWG officially marks the loader spec as "not likely in its current form"
- 2017-05:
import.metais born (access to module-specific meta data) - 2017-08:
@std/esmaims to provide a true polyfill for module support in node - 2017-10: WHATWG spec adds
import.meta.url - 2017-10: V8 implements dynamic
import() - 2017-11: V8 implements
import.meta
- Basic support in some browsers
--experimental-modulesin latest node 8
- 2018-04 (projected): Complete implementation in node.js, although likely still requiring some flags at launch
- Standardization of
.mjsfor JavaScript module files - Unbundled execution for development (?)
- Top-level await (?)
- Integrity hashes, nonce, ... for static and dynamic import (?)
- Official loader hooks (e.g. "bare" imports) on web (?)
- Named/mapped base URLs: whatwg/html#3161
- More generic request data -> request hook: whatwg/html#2640