The Node.js Modules Team maintains and actively develops the ESModules (ESM) implementation in Node.js Core.
Work includes:
- ESM Loader implementation
- ESM Module Specifier Resolution Algorithm
- Loader Hooks
- ESM and Common.js Interoperability
- Node.js and Browser interoperability
- VM Modules implementation
Based on these use cases (#55), our implementation aims to support the following features (subject to change):
- Spec compliance (#132)
- Browser equivalence (#133)
- No refactoring (#87)
- Pluggable Loaders to support multiple use cases (#82)
- Named exports when importing CJS (#81)
- Dual-goal packages (#93)
- Multi-mode packages (#94)
- Code coverage/instrumentation (#95)
- Runtime loaders, transpilation at import time (#96)
- Arbitrary sources for module source text (#97)
- Mock modules (injection) (#98)
- Mixed module types within app/module; gradual migration from CommonJS to ESM (#99)
- Transparent interoperability for ESM importing CommonJS (#100)
- Polyfillability (#101)
- Tree shaking (#102)
- File / path / URL resolving (#103)
- Retrievable module metadata (#104)
- Transparent migration (#105)
- WASM modules (#106)
- Browser and Node compatibility without building (#107)
- Browser-compatible build that includes CommonJS (#108)
- Browser-compatible specifier resolution (#109)
- Specifier resolution customization (#110)
- Package encapsulation (#111)
- Don’t break CommonJS (#112)
- Conditional imports (#113)
- Import JSON without needing asynchronous syntax (#114)
- Importing non-JavaScript files (#115)
- Import CommonJS without needing asynchronous syntax (#116)
- NodeJS contextual pathing use cases (#121)
- @benjamingr - Benjamin Gruenbaum
- @benjamn - Ben Newman
- @bmeck - Bradley Meck
- @ceejbot - C J Silverio
- @chrisdickinson - Chris Dickinson
- @DanielRosenwasser - Daniel Rosenwasser
- @devsnek - Gus Caplan
- @Fishrock123 - Jeremiah Senkpiel
- @GeoffreyBooth - Geoffrey Booth
- @giltayar - Gil Tayar
- @guybedford - Guy Bedford
- @iarna - Rebecca Turner
- @inidaname - Hassan Sani
- @jdalton - John-David Dalton
- @jkrems - Jan Olaf Krems
- @justinfagnani - Justin Fagnani
- @linclark - Lin Clark
- @ljharb - Jordan Harband
- @manekinekko - Wassim Chegham
- @mcollina - Matteo Collina
- @mduleone - Matt DuLeone
- @mhdawson - Michael Dawson
- @MylesBorins - Myles Borins
- @robpalme - Rob Palmer
- @targos - Michaël Zasso
- @tbjers - Torgny Bjers
- @weswigham - Wesley Wigham
- @XadillaX - Khaidi Chu
- @bmeurer - Benedikt Meurer
- @dduleone - Dan DuLeone
- @devamaz - Ahmad Abdul-Aziz
- @eugeneo - Eugene Ostroukhov
- @evanplaice - Evan Plaice
- @hiroppy - Yuta Hiroto
- @jasnell - James M Snell
- @refack - Refael Ackermann
- @robwormald - Rob Wormald
- @tbranyen - Tim Branyen
- @TheLarkInn - Sean Larkin
- @TimothyGu - Timothy Gu
- @WebReflection - Andrea Giammarchi
- @xtuc - Sven Sauleau
- @yosuke-furukawa - Yosuke Furukawa
- @zackschuster - Zack Schuster
- @tzmanics - Tara Z. Manicsic
- @zenparsing - Kevin Smith