babel / babel

🐠 Babel is a compiler for writing next generation JavaScript.
https://babel.dev
MIT License
43.16k stars 5.63k forks source link

Add an --es-modules option #8671

Open milesj opened 6 years ago

milesj commented 6 years ago

Feature Request

Is your feature request related to a problem? Please describe.

Babel is great at compiling to a single target, but not so great at compiling multiple targets with different configurations, for example, when compiling an ES5 target (main lib/) and an ES5 target with ES6 imports/exports (module esm/, which is required for tree shaking).

At the moment, this can be achieved with env variables, double builds, and some conditional statements within the babel configuration. However, it is a bit clunky.

"build": "npm run build:lib && npm run build:esm",
"build:lib": "babel ./src --out-dir ./lib",
"build:esm": "ESM=true babel ./src --out-dir ./esm",

Describe the solution you'd like

The options required for ESM builds are modules: false (and possibly targets.esmodules) in preset-env and useESModules: true in plugin-transform-runtime. It would be nice to be able to pass a CLI option that turns on all ES module related options.

"build": "babel ./src --out-dir ./lib && babel ./src --out-dir ./esm --es-modules",

Describe alternatives you've considered

A true parallelized multiple targeting system that is ran through a single babel command.

targets: [
  { outDir: './lib' },
  { outDir: './esm', esModules: true, plugins: [], presets: [] },
],

Teachability, Documentation, Adoption, Migration Strategy

Will write if considered.

babel-bot commented 6 years ago

Hey @milesj! We really appreciate you taking the time to report an issue. The collaborators on this project attempt to help as many people as possible, but we're a limited number of volunteers, so it's possible this won't be addressed swiftly.

If you need any help, or just have general Babel or JavaScript questions, we have a vibrant Slack community that typically always has someone willing to help. You can sign-up here for an invite.