He estado aprendiendo a través de un curso cómo usar babel en Javascript, entendí la idea de que babel con el preestablecido "env" transpila versiones posteriores de ES a ES5. Sin embargo, me encontré con un escenario en el que babel no cambia en absoluto el método "incluye" de la matriz y no funciona en IE11, para solucionar esto, he leído que hay un polyfill de babel que se puede usar.
Encontré una respuesta que trató de explicar esto, pero no la seguí en absoluto. ¿Alguien podría simplemente explicar por qué babel no maneja todas las transpilaciones de ES de manera predeterminada y requiere un relleno múltiple?
Si entiendo correctamente, un polyfill es algo diseñado para llenar un vacío y hacer que algo funcione que no es compatible, pero pensé que este es el trabajo que babel debe hacer de forma predeterminada.
Un polyfill usa la versión anterior del lenguaje para implementar la función más nueva. Por ejemplo, Babel es compatible con ES6 array.includes
mediante la implementación del método en el mismo ES5. Algo como
Array.prototype.includes = function(val) { return this.indexOf(val) >= 0; }
Por otro lado, la biblioteca central de babel es un transpilador. Esto es responsable de convertir las características de las versiones más nuevas de javascript a versiones anteriores que no son posibles mediante la escritura de un polyfill en la versión anterior. Por ejemplo, sería imposible escribir un polyfill para convertir let
o const
de ES5 en var
, o convertir funciones de flecha en funciones tradicionales. Operaciones como estas necesitan un transpilador para recorrer el código y convertirlo.