Loads ES modules with CJS interop in Node

NodeJS ES Module Loader

Loads ES modules and WebAssembly with CJS interop in Node, roughly according to

WASM support is currently only provided for Node 8 nightly.

Follows the NodeJS resolution algorithm, loading modules first as CJS and then falling back to ES on import or export syntax failures. This effectively provides the "export {}" assumption to load an ES module.

This does mean a double-parse, over the mjs approach currently being taken by Node.

Built with the ES Module Loader polyfill 1.0 branch at


npm install -g node-es-module-loader


Execute an ES module file:

node-esml module.js

For example, where module.js contains:

import fs from 'fs';
import {fn} from './local-es-module.js';
import {wasmFn} from './local-wasm-binary.wasm';

Note that only the default import form for CommonJS modules is supported.

Also supports dynamic loading via the dynamic import syntax:

export function lazyLoad(path) {
  return import(path);

Source maps for errors are fully supported through the source-map-support project.

Source maps also work in Node 6 with the node --inspect flag via:

node --inspect node_modules/.bin/node-esml module.js

Programmatic Usage

var NodeESModuleLoader = require('node-es-module-loader');

var loader = new NodeESModuleLoader(/* optional basePath */);

loader.import('x').then(function(m) {
  // ...


Alternative Babel options can be set with a local .babelrc file.





欢迎 JavaScript 爱好者