Babel transforms, helpers and polyfills
Published
⚠️ Wait up! The article you're viewing was published a long time ago (in internet years), it may be irrelevant or completely incorrect by now. Thread carefully!
Configuring Babel 6 can be a little daunting for starters. Depending on what exact ES2015 features you are trying to transpile, you'll need transforms (plugins/presets), helpers, polyfills or a combination.
ES2015 consists of syntactic sugar, new internals and a revised standard library. In general you won't need to transform features that are standard library, but you will need to polyfill those. The syntactic sugar can mostly be transformed without the polyfill, but sometimes babel will need helpers for them.
The helpers can be automatically inlined during transforms (default behaviour), delivered separately as a runtime, or you can deliver them yourself with babel-plugin-external-helpers-2. It's up to you whether you want to use the entire babel-polyfill (about 90kb) package, or include separate polyfills. Actually, any working polyfill will do.
The table below specifies the requirements for all ES2015 features. List of features taken from es6-features.org.
Feature | Sub-feature | Transform | Helpers | Polyfill |
---|---|---|---|---|
Constants | Constants | required | not necessary | not necessary |
Scoping | Block-Scoped Variables | required | optional | not necessary |
Block-Scoped Functions | required | not necessary | not necessary | |
Arrow Functions | Expression Bodies | required | optional | not necessary |
Statement Bodies | required | optional | not necessary | |
Lexical this | required | optional | not necessary | |
Extended Parameter Handling | Default Parameter Values | required | not necessary | not necessary |
Rest Parameter | required | required | not necessary | |
Spread Operator | required | required | not necessary | |
Template Literals | String Interpolation | required | not necessary | not necessary |
Custom Interpolation | required | required | not necessary | |
Raw String Access | required | required | required | |
Extended Literals | Binary & Octal Literal | required | not necessary | not necessary |
Unicode String & RegExp Literal | required | not necessary | not necessary | |
Enhanced Regular Expression | Regular Expression Sticky Matching | not necessary | not necessary | required |
Enhanced Object Properties | Property Shorthand | required | not necessary | not necessary |
Computed Property Names | required | required | not necessary | |
Method Properties | required | not necessary | not necessary | |
Destructuring Assignment | Array Matching | required | required | not necessary |
Object Matching, Shorthand Notation | required | not necessary | not necessary | |
Object Matching, Deep Matching | required | not necessary | not necessary | |
Parameter Context Matching | required | not necessary | not necessary | |
Fail-Soft Destructuring | required | not necessary | not necessary | |
Modules | Value Export/Import | required | required | not necessary |
Default & Wildcard | required | not necessary | not necessary | |
Classes | Class Definition | required | required | not necessary |
Class Inheritance | required | required | not necessary | |
Class Inheritance, From Expressions | required | not necessary | not necessary | |
Base Class Access | required | required | not necessary | |
Static Members | required | not necessary | not necessary | |
Getter/Setter | required | not necessary | not necessary | |
Symbol Type | Symbol Type | required | required | required |
Global Symbols | not necessary | required | required | |
Iterators | Iterator & For-Of Operator | required | not necessary | required |
Generators | Generator Function, Direct Use | required | not necessary | required |
Generator Function, Iterator Protocol | required | required | required | |
Generator Matching | required | not necessary | required | |
Generator Methods | required | not necessary | required | |
Map/Set & WeakMap/WeakSet | Set Data-Structure | not necessary | not necessary | required |
Map Data-Structure | not necessary | not necessary | required | |
Weak-Link Data-Structures | not necessary | not necessary | required | |
Typed Arrays | Typed Arrays | not necessary | not necessary | required |
New Built-In Methods | Object Property Assignment | not necessary | not necessary | required |
Array Element Finding | not necessary | not necessary | required | |
String Repeating | not necessary | not necessary | required | |
String Searching | not necessary | not necessary | required | |
Number Type Checking | not necessary | not necessary | required | |
Number Safety Checking | not necessary | not necessary | required | |
Number Comparison | not necessary | not necessary | required | |
Number Truncation | not necessary | not necessary | required | |
Number Sign Determination | not necessary | not necessary | required | |
Promises | Promise Usage | not necessary | not necessary | required |
Promise Combination | not necessary | not necessary | required | |
Meta-Programming | Proxying | not possible | not possible | not possible |
Reflection | not necessary | not necessary | required | |
Internationalization & Localization | Collation | not necessary | not necessary | required |
Number Formatting | not necessary | not necessary | required | |
Currency Formatting | not necessary | not necessary | required | |
Date/Time Formatting | not necessary | not necessary | required |