@@ -27,6 +27,7 @@ module.exports = function(api, opts, env) {
2727 var isEnvProduction = env === 'production' ;
2828 var isEnvTest = env === 'test' ;
2929 var isFlowEnabled = validateBoolOption ( 'flow' , opts . flow , true ) ;
30+ var isModern = validateBoolOption ( 'modern' , opts . modern , false ) ;
3031
3132 if ( ! isEnvDevelopment && ! isEnvProduction && ! isEnvTest ) {
3233 throw new Error (
@@ -38,7 +39,30 @@ module.exports = function(api, opts, env) {
3839 ) ;
3940 }
4041
41- return {
42+ function getEnvOptions ( { isModern } ) {
43+ const defaultOpts = {
44+ // `entry` transforms `@babel/polyfill` into individual requires for
45+ // the targeted browsers. This is safer than `usage` which performs
46+ // static code analysis to determine what's required.
47+ // This is probably a fine default to help trim down bundles when
48+ // end-users inevitably import '@babel/polyfill'.
49+ useBuiltIns : 'entry' ,
50+ // Do not transform modules to CJS
51+ modules : false ,
52+ } ;
53+
54+ if ( isModern ) {
55+ return Object . assign ( defaultOpts , {
56+ targets : {
57+ esmodules : true ,
58+ } ,
59+ } ) ;
60+ }
61+
62+ return defaultOpts ;
63+ }
64+
65+ const babelPreset = {
4266 presets : [
4367 isEnvTest && [
4468 // ES features necessary for user's Node version
@@ -52,16 +76,7 @@ module.exports = function(api, opts, env) {
5276 ( isEnvProduction || isEnvDevelopment ) && [
5377 // Latest stable ECMAScript features
5478 require ( '@babel/preset-env' ) . default ,
55- {
56- // `entry` transforms `@babel/polyfill` into individual requires for
57- // the targeted browsers. This is safer than `usage` which performs
58- // static code analysis to determine what's required.
59- // This is probably a fine default to help trim down bundles when
60- // end-users inevitably import '@babel/polyfill'.
61- useBuiltIns : 'entry' ,
62- // Do not transform modules to CJS
63- modules : false ,
64- } ,
79+ getEnvOptions ( { isModern } ) ,
6580 ] ,
6681 [
6782 require ( '@babel/preset-react' ) . default ,
@@ -103,7 +118,7 @@ module.exports = function(api, opts, env) {
103118 } ,
104119 ] ,
105120 // Polyfills the runtime needed for async/await and generators
106- [
121+ ! isModern && [
107122 require ( '@babel/plugin-transform-runtime' ) . default ,
108123 {
109124 helpers : false ,
@@ -119,18 +134,23 @@ module.exports = function(api, opts, env) {
119134 } ,
120135 ] ,
121136 // function* () { yield 42; yield 43; }
122- ! isEnvTest && [
123- require ( '@babel/plugin-transform-regenerator' ) . default ,
124- {
125- // Async functions are converted to generators by @babel /preset-env
126- async : false ,
127- } ,
128- ] ,
137+ ! isEnvTest &&
138+ ! isModern && [
139+ require ( '@babel/plugin-transform-regenerator' ) . default ,
140+ {
141+ // Async functions are converted to generators by @babel /preset-env
142+ async : false ,
143+ } ,
144+ ] ,
129145 // Adds syntax support for import()
130146 require ( '@babel/plugin-syntax-dynamic-import' ) . default ,
131147 isEnvTest &&
132148 // Transform dynamic import to require
133149 require ( 'babel-plugin-transform-dynamic-import' ) . default ,
134150 ] . filter ( Boolean ) ,
135151 } ;
152+
153+ // console.log('PRESET', JSON.stringify(babelPreset)
154+
155+ return babelPreset ;
136156} ;
0 commit comments