Estoy aprendiendo a usar @babel/preset-env para enviar los polyfills del navegador necesarios para nuestros clientes. Tengo entendido que babel enviará polyfills si el cliente que visita el sitio web es uno de los entornos de destino. Y parece haber dos formas de especificar los entornos de destino: 1. lista de navegadores 2. la opción de targets como en { "presets": [["@babel/preset-env", { "targets": "defaults" }]] }
Pero aquí hay algunas cosas que no entiendo muy bien:
core-js . Y agregar polyfill parece un proceso de tiempo de compilación. lo que no entiendo bien es cómo babel realmente selecciona qué polyfills necesita el cliente: ¿babel importa todos los polyfills a la vez y solo los aplica en tiempo de ejecución si es necesario o solo importa los polyfills necesarios en tiempo de compilación? Si Babel no selecciona qué polyfills aplicar , ¿cómo sucede esto durante el tiempo de ejecución? ¿Alguien puede explicarme esto en detalle?targets para configurar los entornos de destino o usar la lista de browserlist para configurar los entornos de destino? Además, estoy confundido acerca de la consulta predeterminada para targets . En el documento de babel diceDebido a esto, el comportamiento de preset-env es diferente al de browserslist: no utiliza la consulta predeterminada cuando no se encuentran objetivos en su configuración de Babel o browserslist. Si desea utilizar la consulta predeterminada, deberá pasarla explícitamente como destino:
Entonces, al tener solo { "presets": ["@babel/preset-env"] } no nos dará la consulta predeterminada y tenemos que establecer explícitamente el objetivo en los valores predeterminados como en "presets": [["@babel/preset-env", { "targets": "defaults" }]] ?
"@babel/preset-env" pero no tiene una browserlist definida ni tengo { "targets": "defaults" } , ¿sigo polillenando algo o en este caso no estamos enviando y polyfills?Babel no está seleccionando polyfills para su cliente, Babel solo se ejecuta en la etapa de compilación y genera los archivos de salida para usted, ahora depende de usted si desea servir esos archivos para todos sus clientes o no. Babel no se ejecuta en su servidor, ni en el lado del cliente, la única vez que se ejecuta es en la etapa de construcción.
Cierto, si no establece su objetivo, no se aplicará ningún objetivo. Significa que babel transformará su código más reciente para admitir demasiados navegadores que aumentarán el tamaño de su archivo (o el rendimiento del lado del cliente), por eso recomiendan especificar objetivos.
Justo lo contrario, en ese caso, Babel se transformará demasiado, al apuntar a objetivos específicos, Babel hará menos trabajo y solo admitirá versiones posteriores de los navegadores (según lo especifique).