1.1.0 • Published 5 years ago

esm_prateek v1.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
5 years ago

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 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

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:

Options

Specify options with one of the following:

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

DevOpts

Tips

Bundling

  • Add a “module” field to package.json with the path to the main ES module.

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

  • Use esmify with browserify.

Extensions

Loading

  • The jasmine test runner does not have a mechanism to load esm. However, esm can load a bootstrap file that programmaticly runs tests following their library usage example.

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

  • Load esm with the “node-args” options of

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

    :bulb: By Node’s rules, builtin require cannot sideload .mjs files. However, with esm, ES modules can be sideloaded as .js files or .mjs files may be loaded with dynamic import.