node –experimental-modules, requested module does not provide an export named

EDITED NEW (AND MUCH BETTER) ANSWER

The Node team is … slow. Meanwhile, the same guy who brought us Lodash (John-David Dalton) imagined a brilliant solution, and his idea is the best way to get full ES6 module support in 2019.

(In fact, I want to delete my earlier answer, but I’ve left it for historical purposes.)

The new solution is SUPER simple.

Step #1:

npm i esm

(https://www.npmjs.com/package/esm for package details)

Step #2:

node -r esm yourApp.js

That’s the entirety of it: it’s really just that easy. Just add -r esm as a Node arg, and everything just magically works (it’s even less typing than --experimental-modules!) Thank you John-David Dalton!!!

As I said in my original answer, presumably someday Node will finally release full ES6 support, but when that happens adopting it will be as easy as removing “-r esm” from a few scripts 😀

Finally, to give credit where due, while I didn’t find it through his answer, @Divyanshu Rawat actually provided an answer with the precursor to this library long before I made this update.

ORIGINAL ANSWER

--experimental-modules does not have support for named exports yet:

–experimental-modules doesn’t support importing named exports from a commonjs module (except node’s own built-ins).

This is why you are unable to use the syntax:

 import { throttle } from 'lodash';

Instead (for now at least) you have to destruct what you need:

 import lodash from 'lodash';
 const { throttle } = lodash;

Presumably someday Node will add support for all of the ES Module features.

Leave a Comment