Hello everyone, package @babel/preset-env
may many of you are familiar with it but do you really understand its power? Let's find out together today. Into the 
1. Preparation
Request:
- Already have basic knowledge about
Babel
. - The environment I will demo:
- macOS
- node v10.16.1
- yarn v1.17.3
- Editor: VSCode
Purpose:
- Learn more about package
@babel/preset-env
. - Find advantages and disadvantages to use to suit each project.
2. Content
What is Babel?
Babel is a compiler
1 2 | source code → output code |
Like other compilers it runs in 3 stages
1 2 | parsing → transforming → printing |
Preset env
- Simply put, it allows you to use the latest JavaScript syntax without worrying about compatibility with JavaScript interpreters in browsers (Of course there will be some exceptions) because it will convert into
ES5
syntax (JavaScript engine can understand) - It is a collection of
@babel/plugin-*
, its list of plugins you can see here
For example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment">// input.js</span> <span class="token keyword">const</span> <span class="token function-variable function">func</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token function">func</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token keyword">const</span> name <span class="token operator">=</span> <span class="token string">'Dai'</span> <span class="token keyword">const</span> age <span class="token operator">=</span> <span class="token string">'69'</span> <span class="token keyword">const</span> info <span class="token operator">=</span> <span class="token template-string"><span class="token string">`name: </span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> Dai <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">, age: </span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> age <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">.`</span></span> <span class="token comment">// output.js</span> <span class="token string">"use strict"</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> <span class="token function-variable function">func</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token function">func</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token function">func</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> name <span class="token operator">=</span> <span class="token string">'Dai'</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> age <span class="token operator">=</span> <span class="token string">'69'</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> info <span class="token operator">=</span> <span class="token string">"name: "</span> <span class="token punctuation">.</span> <span class="token function">concat</span> <span class="token punctuation">(</span> Dai <span class="token punctuation">,</span> <span class="token string">", age: "</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">concat</span> <span class="token punctuation">(</span> age <span class="token punctuation">,</span> <span class="token string">"."</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Options
1 2 3 4 5 6 7 8 9 10 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"loose"</span> <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> <span class="token string">"modules"</span> <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> |
We will go through the common options
modules
"amd" | "umd" | "systemjs" | "commonjs" | "cjs" | "auto" | false
, defaults to false
For example, we want to convert ES6 module
syntax into commonjs module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"modules"</span> <span class="token punctuation">:</span> <span class="token string">"commonjs"</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment">// input.js</span> <span class="token keyword">import</span> <span class="token punctuation">{</span> func1 <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./input2'</span> <span class="token keyword">function</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'start'</span> <span class="token punctuation">)</span> <span class="token function">func1</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'end'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// output.js</span> <span class="token string">"use strict"</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> _input <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"./input2"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'start'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">,</span> _input <span class="token punctuation">.</span> func1 <span class="token punctuation">)</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'end'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
When working with webpack
you may often see the modules: false
option, the purpose to turn off the ES6 module
conversion function because the webpack already supports it and makes it even better.
targets
string | Array<string> | { [string]: string }
, defaults to {}
Describe the environments your project supports
For example you want to support chrome58
and ie11
environments
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"targets"</span> <span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token string">"chrome"</span> <span class="token punctuation">:</span> <span class="token string">"58"</span> <span class="token punctuation">,</span> <span class="token string">"ie"</span> <span class="token punctuation">:</span> <span class="token string">"11"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> |
useBuiltIns
"usage" | "entry" | false
, defaults to false
This option configures how @babel/preset-env
handles polyfill
These 2 packages need to be installed so babel can help you import polyfill
1 2 3 | <span class="token string">"core-js"</span> <span class="token comment">// hoặc chỉ định rõ version <a href="/cdn-cgi/l/email-protection" class="__cf_email__">[email protected]</a></span> <span class="token string">"regenerator-runtime/runtime"</span> |
For example we use useBuiltIns: usage
and corejs: 3
1 2 3 4 5 6 7 8 9 10 | <span class="token comment">// input.js</span> <span class="token keyword">const</span> handleAsyncAwait <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> greeting <span class="token operator">=</span> <span class="token keyword">await</span> Promise <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> <span class="token string">'hi'</span> <span class="token punctuation">)</span> <span class="token keyword">return</span> greeting <span class="token punctuation">}</span> <span class="token keyword">const</span> myMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token keyword">const</span> myArray <span class="token operator">=</span> Array <span class="token punctuation">.</span> <span class="token keyword">from</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> x <span class="token punctuation">)</span> <span class="token operator">=></span> x <span class="token operator">+</span> x <span class="token punctuation">)</span> <span class="token keyword">const</span> isExistedInArray <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'a'</span> <span class="token punctuation">,</span> <span class="token string">'b'</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> <span class="token string">'a'</span> <span class="token punctuation">)</span> |
For each different target
, the number of imported polyfill
will also be different
- with target is
ie11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"useBuiltIns"</span> <span class="token punctuation">:</span> <span class="token string">"usage"</span> <span class="token punctuation">,</span> <span class="token string">"corejs"</span> <span class="token punctuation">:</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token string">"targets"</span> <span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token string">"ie"</span> <span class="token punctuation">:</span> <span class="token number">11</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment">// output.js</span> <span class="token string">"use strict"</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.array.from"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.array.includes"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.array.iterator"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.map"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.object.to-string"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.promise"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.string.iterator"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/web.dom-collections.iterator"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"regenerator-runtime/runtime"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">asyncGeneratorStep</span> <span class="token punctuation">(</span> gen <span class="token punctuation">,</span> resolve <span class="token punctuation">,</span> reject <span class="token punctuation">,</span> _next <span class="token punctuation">,</span> _throw <span class="token punctuation">,</span> key <span class="token punctuation">,</span> arg <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> info <span class="token operator">=</span> gen <span class="token punctuation">[</span> key <span class="token punctuation">]</span> <span class="token punctuation">(</span> arg <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> value <span class="token operator">=</span> info <span class="token punctuation">.</span> value <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">reject</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> info <span class="token punctuation">.</span> done <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> Promise <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> value <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> _next <span class="token punctuation">,</span> _throw <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">_asyncToGenerator</span> <span class="token punctuation">(</span> fn <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> self <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">,</span> args <span class="token operator">=</span> arguments <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> resolve <span class="token punctuation">,</span> reject <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> gen <span class="token operator">=</span> fn <span class="token punctuation">.</span> <span class="token function">apply</span> <span class="token punctuation">(</span> self <span class="token punctuation">,</span> args <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">_next</span> <span class="token punctuation">(</span> value <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">asyncGeneratorStep</span> <span class="token punctuation">(</span> gen <span class="token punctuation">,</span> resolve <span class="token punctuation">,</span> reject <span class="token punctuation">,</span> _next <span class="token punctuation">,</span> _throw <span class="token punctuation">,</span> <span class="token string">"next"</span> <span class="token punctuation">,</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">_throw</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">asyncGeneratorStep</span> <span class="token punctuation">(</span> gen <span class="token punctuation">,</span> resolve <span class="token punctuation">,</span> reject <span class="token punctuation">,</span> _next <span class="token punctuation">,</span> _throw <span class="token punctuation">,</span> <span class="token string">"throw"</span> <span class="token punctuation">,</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">_next</span> <span class="token punctuation">(</span> undefined <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> handleAsyncAwait <span class="token operator">=</span> <span class="token comment">/*#__PURE__*/</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> _ref <span class="token operator">=</span> <span class="token function">_asyncToGenerator</span> <span class="token punctuation">(</span> <span class="token comment">/*#__PURE__*/</span> regeneratorRuntime <span class="token punctuation">.</span> <span class="token function">mark</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token function">_callee</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> greeting <span class="token punctuation">;</span> <span class="token keyword">return</span> regeneratorRuntime <span class="token punctuation">.</span> <span class="token function">wrap</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token function">_callee$</span> <span class="token punctuation">(</span> _context <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span> _context <span class="token punctuation">.</span> prev <span class="token operator">=</span> _context <span class="token punctuation">.</span> next <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token number">0</span> <span class="token punctuation">:</span> _context <span class="token punctuation">.</span> next <span class="token operator">=</span> <span class="token number">2</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> Promise <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> <span class="token string">'hi'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token number">2</span> <span class="token punctuation">:</span> greeting <span class="token operator">=</span> _context <span class="token punctuation">.</span> sent <span class="token punctuation">;</span> <span class="token keyword">return</span> _context <span class="token punctuation">.</span> <span class="token function">abrupt</span> <span class="token punctuation">(</span> <span class="token string">"return"</span> <span class="token punctuation">,</span> greeting <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">case</span> <span class="token number">4</span> <span class="token punctuation">:</span> <span class="token keyword">case</span> <span class="token string">"end"</span> <span class="token punctuation">:</span> <span class="token keyword">return</span> _context <span class="token punctuation">.</span> <span class="token function">stop</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> _callee <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token function">handleAsyncAwait</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> _ref <span class="token punctuation">.</span> <span class="token function">apply</span> <span class="token punctuation">(</span> <span class="token keyword">this</span> <span class="token punctuation">,</span> arguments <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> myMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> myArray <span class="token operator">=</span> Array <span class="token punctuation">.</span> <span class="token keyword">from</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> x <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> x <span class="token operator">+</span> x <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> isExistedInArray <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'a'</span> <span class="token punctuation">,</span> <span class="token string">'b'</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> <span class="token string">'a'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- with target
chrome60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <span class="token comment">// .babelrc</span> <span class="token punctuation">{</span> <span class="token string">"presets"</span> <span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token string">"@babel/preset-env"</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"useBuiltIns"</span> <span class="token punctuation">:</span> <span class="token string">"usage"</span> <span class="token punctuation">,</span> <span class="token string">"corejs"</span> <span class="token punctuation">:</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token string">"targets"</span> <span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token string">"chrome"</span> <span class="token punctuation">:</span> <span class="token number">60</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment">// output.js</span> <span class="token string">"use strict"</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.array.iterator"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/es.promise"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"core-js/modules/web.dom-collections.iterator"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> handleAsyncAwait <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> greeting <span class="token operator">=</span> <span class="token keyword">await</span> Promise <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> <span class="token string">'hi'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> greeting <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> myMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> myArray <span class="token operator">=</span> Array <span class="token punctuation">.</span> <span class="token keyword">from</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> x <span class="token operator">=></span> x <span class="token operator">+</span> x <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> isExistedInArray <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'a'</span> <span class="token punctuation">,</span> <span class="token string">'b'</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> <span class="token string">'a'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Normally for company projects, you should use useBuiltIns: entry
and import these 2 first in the file entry will bundle
1 2 3 | <span class="token keyword">import</span> <span class="token string">"core-js/stable"</span> <span class="token keyword">import</span> <span class="token string">"regenerator-runtime/runtime"</span> |
And it will import all the polyfill
based on the corresponding environment
loose
boolean
defaults to false
Many plugin
in babel
have 2 modes
- Normal mode follows
ECMAScript
's semantics as closely as possible when converting them intoES5
- The
loose
action will makeES5
code simpler when transformed (less code but sometimes unsafe by 1).
There are also many other options you can read more here
3. Conclusion
Through this article hope to help you somewhat better understand this package:
- See the code conversion.
- The environment in which your project is directed is most fully supported and also reduces the size of the bundle file.
-
polyfill
code.
Thank you for reading this article.
Complete the above example at the repo