Skip to content

Latest commit

 

History

History

2-babel

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

npm-es-modules-2-babel

Breakdown of 7 different ways to use ES modules with npm today.

NPM Build Status JavaScript Style Guide

This approach uses babel with babel-preset-env to transpile all Node.js and browser source files into dist/. It is relatively simple, with package.json properly supporting all three main, module, and browser fields.

  • Source files end in .mjs
  • Babel transpiles all source files to commonjs
  • Tests are run on the transpiled source, which could make debugging slightly harder
  • Currently, our main and browser are commonjs exports that support node >= 4 (or whatever we specify in our babel-preset-env config), whereas the module export is an es module that supports node >=8 due to its usage of async await.
  • Unfortunately AFAIK, package.json engines doesn't support specifying that main supports a certain node version whereas module supports a different module version, and I'd go so far as to say this is a bad practice.
  • To get around this, we could specify the minimum node version to be node >= 8 like we did here or add a second babel step which transpiles the node version to an esm folder, although I find this somewhat clunky.

Approaches

  1. naive - The most naive possible use of ES modules supporting our functionality. This approach is broken and provided as an example starting point.
  2. babel - Uses babel to transpile all Node.js and browser source files.
  3. esm-rollup - Uses esm for Node.js and babel+rollup to compile browser source files.
  4. esm-webpack - Uses esm for Node.js and babel+webpack to compile browser source files.
  5. rollup - Uses babel+rollup to compile all Node.js and browser source files.
  6. webpack - Uses babel+webpack to compile all Node.js and browser source files.
  7. typescript - Uses typescript to transpile all Node.js and browser source files.

License

MIT © Travis Fischer