esm

Tomorrow's ECMAScript modules today!

MIT 140 个版本
安装
npm install esm
yarn add esm
pnpm add esm
bun add esm
README

esm

The 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

    // 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 esm or yarn create esm.

  2. Enable esm for local runs:

    node -r esm main.js
    

    :bulb: Omit the filename to enable esm 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:

Options

Specify options with one of the following:

  • "esm" field in package.json
  • CJS/ESM in an .esmrc.js, .esmrc.cjs, or .esmrc.mjs file
  • JSON6 in an .esmrc or .esmrc.json file
  • JSON6 or file path in the ESM_OPTIONS environment variable
  • ESM_DISABLE_CACHE environment variable
{
"cjs":true

A boolean or object for toggling CJS features in ESM.

Features
{
"cache":true

A boolean for storing ES modules in require.cache.

"esModule":true

A boolean for __esModule interoperability.

"extensions":true

A boolean for respecting require.extensions in ESM.

"mutableNamespace":true

A boolean for mutable namespace objects.

"namedExports":true

A boolean for importing named exports of CJS modules.

"paths":true

A boolean for following CJS path rules in ESM.

"vars":true

A boolean for __dirname, __filename, and require in ESM.

"dedefault":false

A boolean for requiring ES modules without the dangling require().default.

"topLevelReturn":false

A boolean for top-level return support.

}
"mainFields":["main"]

An array of fields checked when importing a package.

"mode":"auto"

A string mode:

  • "auto" detect files with import, import.meta, export,
    "use module", or .mjs as ESM.
  • "all" files besides those with "use script" or .cjs are treated as ESM.
  • "strict" to treat only .mjs files as ESM.
"await":false

A boolean for top-level await in modules without ESM exports. (Node 10+)

"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

Bundling

  • For bundlers like browserify+esmify, parcel-bundler, and webpack add a "module" field to package.json pointing to the main ES module.

    "main": "index.js",
    "module": "main.js"
    

    :bulb: This is automagically done with npm init esm or yarn create esm.

Extensions

Loading

  • Load esm before loaders/monitors like @babel/register, newrelic, sqreen, and ts-node.

  • Load esm for jasmine using the "helpers" field in jasmine.json:

    "helpers": [
      "node_modules/esm"
    ]
    
  • Load esm with “node-args" options of:

    • pm2: --node-args="-r esm"
  • Load esm with “require” options of ava, mocha, nodemon, nyc, qunit, tape, and webpack.

    :bulb: Builtin require cannot sideload .mjs files. However, .js files can be sideloaded or .mjs files may be loaded with dynamic import.

版本列表
3.2.25 2019-05-17
3.2.24 2019-05-16
3.2.23 2019-05-16
3.2.22 2019-03-29
3.2.21 2019-03-28
3.2.20 2019-03-21
3.2.19 2019-03-21
3.2.18 2019-03-15
3.2.17 2019-03-14
3.2.16 2019-03-12
3.2.15 2019-03-12
3.2.14 2019-03-09
3.2.13 2019-03-08
3.2.12 2019-03-08
3.2.11 2019-03-05
3.2.10 2019-03-03
3.2.9 2019-03-02
3.2.8 2019-03-01
3.2.7 2019-02-26
3.2.6 2019-02-23
3.2.5 2019-02-16
3.2.4 2019-02-08
3.2.3 2019-02-07
3.2.2 2019-02-07
3.2.1 2019-02-05
3.2.0 2019-01-30
3.1.4 2019-01-27
3.1.3 2019-01-26
3.1.2 2019-01-25
3.1.1 2019-01-19
3.1.0 2019-01-16
3.0.84 2018-09-17
3.0.83 2018-09-17
3.0.82 2018-09-04
3.0.81 2018-08-30
3.0.80 2018-08-23
3.0.79 2018-08-20
3.0.78 2018-08-20
3.0.77 2018-08-16
3.0.76 2018-08-14
3.0.75 2018-08-13
3.0.74 2018-08-03
3.0.73 2018-08-03
3.0.72 2018-07-20
3.0.71 2018-07-14
3.0.70 2018-07-13
3.0.69 2018-07-12
3.0.68 2018-07-12
3.0.67 2018-07-12
3.0.66 2018-07-10
3.0.65 2018-07-09
3.0.64 2018-07-08
3.0.63 2018-07-06
3.0.62 2018-07-03
3.0.61 2018-07-02
3.0.60 2018-07-01
3.0.59 2018-07-01
3.0.58 2018-06-30
3.0.57 2018-06-30
3.0.56 2018-06-30
3.0.55 2018-06-25
3.0.54 2018-06-24
3.0.53 2018-06-23
3.0.52 2018-06-21
3.0.51 2018-06-15
3.0.50 2018-06-15
3.0.49 2018-06-11
3.0.48 2018-06-05
3.0.47 2018-06-04
3.0.46 2018-06-03
3.0.45 2018-06-03
3.0.44 2018-06-01
3.0.43 2018-06-01
3.0.42 2018-06-01
3.0.41 2018-05-30
3.0.40 2018-05-30
3.0.39 2018-05-29
3.0.38 2018-05-25
3.0.37 2018-05-23
3.0.36 2018-05-20
3.0.35 2018-05-20
3.0.34 2018-05-10
3.0.33 2018-05-10
3.0.32 2018-05-09
3.0.31 2018-05-07
3.0.30 2018-05-07
3.0.29 2018-05-04
3.0.28 2018-04-27
3.0.27 2018-04-26
3.0.26 2018-04-25
3.0.25 2018-04-24
3.0.24 2018-04-23
3.0.23 2018-04-23
3.0.22 2018-04-22
3.0.21 2018-04-21
3.0.20 2018-04-19
3.0.19 2018-04-17
3.0.18 2018-04-13
3.0.17 2018-04-09
3.0.16 2018-04-04
3.0.15 2018-04-02
3.0.14 2018-03-29
3.0.13 2018-03-29
3.0.12 2018-03-28
3.0.11 2018-03-28
3.0.10 2018-03-27
3.0.9 2018-03-25
3.0.8 2018-03-23
3.0.7 2018-03-21
3.0.6 2018-03-16
3.0.5 2018-03-13
3.0.4 2018-03-13
3.0.3 2018-03-13
3.0.2 2018-03-11
3.0.1 2018-03-11
3.0.0 2018-03-10
2.2.0 2018-03-10
2.1.2 2016-09-01
2.1.1 2016-08-01
2.1.0 2016-07-28
2.0.9 2016-07-28
2.0.8 2016-07-28
2.0.7 2016-06-19
2.0.6 2016-06-19
2.0.5 2016-06-19
2.0.4 2016-06-19
2.0.3 2016-06-19
2.0.2 2016-06-19
2.0.1 2016-06-19
2.0.0 2016-06-16
1.0.9 2015-07-12
1.0.8 2015-06-24
1.0.7 2015-06-24
1.0.6 2015-06-24
1.0.5 2015-06-03
1.0.4 2015-06-03
1.0.3 2015-06-03
1.0.2 2015-06-02
1.0.1 2015-06-02
1.0.0 2015-06-02