Advertencias
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Polyfills
Para que ciertas características funcionen, requieren polyfills específicos. Puedes satisfacer todos
los requisitos de características de Babel usando un polyfill completo como core-js/actual o (si prefieres cargarlo mediante una etiqueta <script>) core-js-bundle.
Alternativamente, puedes incluir selectivamente solo lo necesario:
| Feature | Requirements |
|---|---|
| Array destructuring, For Of | Symbol, prototype[Symbol.iterator] |
| Spread | Array.from |
Si estás compilando generadores o funciones asíncronas a ES5, y usas una versión de @babel/core o @babel/plugin-transform-regenerator anterior a 7.18.0, también debes cargar el paquete regenerator runtime. Se carga automáticamente al usar la opción useBuiltIns: "usage" de @babel/preset-env o @babel/plugin-transform-runtime.
Built-ins
Babel asume que los built-ins (ej. Array, WeakMap y otros), si tienen polyfills, están modificados de manera compatible con la especificación.
Clases
Las clases built-in como Date, Array, DOM etc. no pueden subclasificarse correctamente
debido a limitaciones de ES5 (para el plugin transform-classes).
Puedes intentar usar babel-plugin-transform-builtin-extend basado en Object.setPrototypeOf y Reflect.construct, pero también tiene limitaciones.
ES5
Como Babel asume que tu código se ejecutará en un entorno ES5, utiliza funciones ES5. Si usas un entorno con soporte limitado o nulo para ES5 (como versiones antiguas de IE), usar @babel/polyfill añadirá soporte para estos métodos.
Internet Explorer
Clases (10 e inferiores)
Al heredar de una clase, las propiedades estáticas se heredan mediante __proto__, soporte ampliamente disponible pero que puede fallar en navegadores muy antiguos.
NOTA: __proto__ no es compatible en IE ≤ 10, por lo que las propiedades estáticas
no se heredarán. Consulta
protoToAssign para una posible solución.
En clases que usan super, la superclase no se resolverá correctamente.
Puedes solucionarlo activando la opción loose en el plugin transform-classes.
Getters/setters (8 e inferiores)
En IE8 Object.defineProperty solo funciona en objetos DOM. Esto es problemático
porque se requiere para definir getters y setters. Por ello, si planeas
soportar IE8 o inferior, no se recomienda usar getters ni setters.
Referencia: MDN.
Módulos
Por defecto, al usar módulos con Babel se exporta una propiedad no enumerable __esModule
mediante Object.defineProperty, incompatible con IE8 e inferiores. Una solución
es activar la opción loose en tu plugin de módulos correspondiente.