3.3.0 • Published 5 months ago

@httptoolkit/esm v3.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

@httptoolkit/esm

Part of HTTP Toolkit: powerful tools for building, testing & debugging HTTP(S)

This is a forked version of the esm package: the brilliantly simple, babel-less, bundle-less ECMAScript module loader (which is now unmaintained). This fork includes:

  • Assorted updates from the esm-wallaby fork adding support for ES modules containing new ES syntax, supporting modern Node versions (at least up to v21), and supporting node:* imports.
  • Support for modules that use the const require = createRequire(...) pattern (or declare any other global require variable) which are otherwise unusable with esm.
  • Support for modules that use only an exports map in their package.json, without a main field, which are otherwise unresolveable (reporting "Cannot find module", even though import() works correctly).

Install

Run npm i @httptoolkit/esm or yarn add @httptoolkit/esm.

Getting started

There are two ways to enable @httptoolkit/esm.

  1. Enable @httptoolkit/esm for packages:

    Use @httptoolkit/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("@httptoolkit/esm")(module/*, options*/)
    module.exports = require("./main.js")

    main.js

    // ESM syntax is supported.
    export {}
  2. Enable @httptoolkit/esm for local runs:

    node -r @httptoolkit/esm main.js

    :bulb: Omit the filename to enable @httptoolkit/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 @httptoolkit/esm options.

Out of the box @httptoolkit/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

DevOpts

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 @httptoolkit/esm before loaders/monitors like @babel/register, newrelic, sqreen, and ts-node.

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

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

    • pm2: --node-args="-r @httptoolkit/esm"
  • Load @httptoolkit/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.