esm_prateek
esm
A fast, production ready, zero-dependency ES module loader for Node 6+!
See the release post and video for all the details.
Install
New projects
Run
npm init esmoryarn create esm.Use the
-yflag to answer “yes” to all prompts.Existing projects
Run
npm i esmoryarn add esm.
Getting started
There are two ways to enable esm.
Enable
esmfor packages:Use
esmto load the main ES module and export it as CommonJS.index.js
// Set options as a parameter, environment variable, or rc file. require = require("esm")(module/*, options*/) module.exports = require("./main.js")main.js
// ESM syntax is supported. export {}These files are automagically created with
npm init esmoryarn create esm.Enable
esmfor local runs:node -r esm main.jsOmit the filename to enable
esmin the REPL.
Features
The esm loader bridges the ESM of today to the
ESM of tomorrow.
By default, percent CJS interoperability is enabled so you can get stuff done fast.
.mjs files are limited to basic functionality without support for esm options.
Out of the box esm just works, no configuration necessary, and supports:
import/exportimport.meta- Dynamic
import - Improved errors
- Live bindings
- Loading
.mjsfiles as ESM - The file URI scheme
- Node
--evaland--printflags - Node
--checkflag (Node 10+)
Options
Specify options with one of the following:
- The
"esm"field inpackage.json - CJS/ESM in an
.esmrc.jsor.esmrc.mjsfile - JSON6 in an
.esmrcor.esmrc.jsonfile - JSON6 or file path in the
ESM_OPTIONSenvironment variable - The
ESM_DISABLE_CACHEenvironment variable
{ |
|||||||||||||||||||
"await": |
A boolean for top-level |
||||||||||||||||||
"cjs": |
A boolean or object for toggling CJS features in ESM. Features
|
||||||||||||||||||
"force": |
A boolean to apply these options to all module loads. |
||||||||||||||||||
"mainFields": |
An array of fields, e.g. |
||||||||||||||||||
"mode": |
A string mode:
|
||||||||||||||||||
} |
|||||||||||||||||||
DevOpts
{ |
|
"cache": |
A boolean for toggling cache creation or cache directory path. |
"sourceMap": |
A boolean for including inline source maps. |
} |
|
Tips
Bundling
Add a “module” field to
package.jsonwith the path to the main ES module.This is automagically done with
npm init esmoryarn create esm.Use
esmifywithbrowserify.
Extensions
- Enable ESM syntax for
wallaby.jsfollowing their integration example.
Loading
The
jasminetest runner does not have a mechanism to loadesm. However,esmcan load a bootstrap file that programmaticly runs tests following their library usage example.Load
esmbefore loaders/monitors like@babel/register,newrelic,sqreen, andts-node.Load
esmwith the “node-args” options ofLoad
esmwith “require” options ofava,mocha,nodemon,nyc,qunit,tape, andwebpack.By Node’s rules, builtin
requirecannot sideload.mjsfiles. However, withesm, ES modules can be sideloaded as.jsfiles or.mjsfiles may be loaded with dynamicimport.