0.0.2 • Published 7 years ago
npm-es-modules-2-babel v0.0.2
npm-es-modules-2-babel
Breakdown of 7 different ways to use ES modules with npm today.
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
mainandbrowserare commonjs exports that supportnode >= 4(or whatever we specify in our babel-preset-env config), whereas themoduleexport is an es module that supportsnode >=8due to its usage ofasync await. - Unfortunately AFAIK, package.json
enginesdoesn't support specifying thatmainsupports a certain node version whereasmodulesupports 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 >= 8like 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
- naive - The most naive possible use of ES modules supporting our functionality. This approach is broken and provided as an example starting point.
- babel - Uses babel to transpile all Node.js and browser source files.
- esm-rollup - Uses esm for Node.js and babel+rollup to compile browser source files.
- esm-webpack - Uses esm for Node.js and babel+webpack to compile browser source files.
- rollup - Uses babel+rollup to compile all Node.js and browser source files.
- webpack - Uses babel+webpack to compile all Node.js and browser source files.
- typescript - Uses typescript to transpile all Node.js and browser source files.
License
MIT © Travis Fischer
0.0.2
7 years ago
0.0.1-security
7 years ago