Tomorrow's ECMAScript modules today!
npm install esmThe brilliantly simple, babel-less, bundle-less ECMAScript module loader.
> esm is the world’s most advanced ECMAScript module loader.
This fast, production ready, zero dependency loader is all you need to support
ECMAScript modules in Node 6+. See the release post
and video for details!
Install
---
* __New projects__
Run npm init esm or yarn create esm.
:bulb: Use the -y flag to answer “yes” to all prompts.
* __Existing projects__
Run npm i esm or yarn add esm.
Getting started
---
There are two ways to enable esm.
1. Enable esm for packages:
Use esm to load the main ES module and export it as CommonJS.
__index.js__
``js`
// Set options as a parameter, environment variable, or rc file.
require = require("esm")(module/, options/)
module.exports = require("./main.js")
`
__main.js__
js`
// ESM syntax is supported.
export {}
npm init esm
:bulb: These files are automagically created with or yarn create esm.
2. Enable esm for local runs:
`shell`
node -r esm main.js
esm
:bulb: Omit the filename to enable in the REPL.
Features
---
:clap: By default, :100: percent CJS interoperability is enabled so you can get stuff done.
: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:
* Passing all applicable test262 compliance tests
* import/export
* import.meta
* Dynamic import
* Live bindings
* File URI scheme
* Node stdin, --eval, --print flags--check
* Node flag _(Node 10+)_
Options
---
Specify options with one of the following:
* "esm" field in package.json.esmrc.js
* CJS/ESM in an , .esmrc.cjs, or .esmrc.mjs file.esmrc
* JSON6 in an or .esmrc.json fileESM_OPTIONS
* JSON6 or file path in the environment variableESM_DISABLE_CACHE
* environment variable
{ | |||||||||||||||||||||||
"cjs":true | A boolean or object for toggling CJS features in ESM. A boolean for storing ES modules in A boolean for A boolean for respecting A boolean for mutable namespace objects. A boolean for importing named exports of CJS modules. A boolean for following CJS path rules in ESM. A boolean for A boolean for requiring ES modules without the dangling A boolean for top-level | ||||||||||||||||||||||
"mainFields":["main"] | An array of fields checked when importing a package. | ||||||||||||||||||||||
"mode":"auto" | A string mode:
| ||||||||||||||||||||||
"await":false | A boolean for top-level | ||||||||||||||||||||||
"force":false | A boolean to apply these options to all module loads. | ||||||||||||||||||||||
"wasm":false | A boolean for WebAssembly module support. (Node 8+) | ||||||||||||||||||||||
} | |||||||||||||||||||||||
DevOpts
---
{ | |
"cache":true | A boolean for toggling cache creation or a cache directory path. |
"sourceMap":false | A boolean for including inline source maps. |
} | |
Tips
---
* For bundlers like browserify+esmify,
parcel-bundler, and webpack
add a "module" field to package.json pointing to the main ES module.`
json`
"main": "index.js",
"module": "main.js"
:bulb: This is automagically done with npm init esm or yarn create esm.
* Enable esm for wallaby.js following their
integration example.
* Load esm before loaders/monitors like@babel/register
,newrelic
,sqreen
, andts-node
.
* Load esm for jasmine using the"helpers"
jasmine.json
field in :`
json`
"helpers": [
"node_modules/esm"
]
* Load esm with “node-args" options of:pm2
- : --node-args="-r esm"
* Load esm with “require” options ofava
,mocha
,nodemon
,nyc
,qunit
,tape
, andwebpack
.
:bulb: Builtin require cannot sideload .mjs files. However, .js files.mjs
can be sideloaded or files may be loaded with dynamic import`.