esm_prateek v1.1.0
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.:bulb: 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 {}:bulb: These files are automagically created with
npm init esmoryarn create esm.Enable
esmfor local runs:node -r esm main.js:bulb: Omit the filename to enable
esmin the REPL.
Features
The esm loader bridges the ESM of today to the
ESM of tomorrow.
:clap: By default, :100: percent CJS interoperability is enabled so you can get stuff done fast.
:lock: .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
DevOpts
Tips
Bundling
Add a “module” field to
package.jsonwith the path to the main ES module.:bulb: 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.:bulb: By Node’s rules, builtin
requirecannot sideload.mjsfiles. However, withesm, ES modules can be sideloaded as.jsfiles or.mjsfiles may be loaded with dynamicimport.