Lanzamiento de la versión 6.0.0
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
NOTA: No todas las integraciones se han actualizado aún. Esta es una versión mayor muy disruptiva, así que tengan paciencia mientras pulimos los detalles finales.
¡Es difícil creer que ya ha pasado un año desde que comenzó el proyecto Babel, pero hubo una tarta de cumpleaños, así que debe ser real!
I work with some super awesome people. Thank you @cpojer and Ovidiu! pic.twitter.com/l1NzyobiBz
— Sebastian McKenzie (@sebmck) September 28, 2015
Muchísimo ha sucedido durante el último año. Hemos viajado por todo el mundo hablando sobre Babel y hemos conocido a personas increíbles en el camino.
Babel ha pasado el último año encontrando su lugar en la comunidad JavaScript. En febrero decidimos que Babel no sería solo un transpilador de ES6. En cambio, necesitaba convertirse en una plataforma. Un conjunto de herramientas diseñadas para crear la próxima generación de utilidades para JavaScript.
Cuando lanzamos Babel 5, incluía una nueva API de plugins que permitía a cualquiera usar todo el poder de Babel para crear herramientas que se integran directamente en el proceso de transformación. En solo unos meses, esto ha crecido exponencialmente hasta convertirse en todo un ecosistema de herramientas.
Los desarrolladores han creado de todo: desde herramientas de depuración, optimizaciones para frameworks y minificadores hasta nuevas sintaxis experimentales y sistemas para aplicar reglas complejas en sus bases de código. Estas extensiones han demostrado ser tanto creativas como extremadamente útiles.
También se han construido herramientas complejas sobre los componentes internos de Babel, como documentationjs, que utiliza el parser Babylon de Babel para reemplazar una herramienta existente con una versión mucho más inteligente.
Pero creemos que podemos ir aún más lejos. Babel debería poder impulsar minificadores, linters, formateadores, resaltadores de sintaxis, herramientas de autocompletado de código, verificadores de tipos, herramientas de codemod y cualquier otra utilidad que utilice la misma base para realizar su trabajo mejor que nunca.
Por eso hoy lanzamos Babel 6.
Esta es la actualización más significativa que hemos hecho y permite que el proyecto se convierta verdaderamente en una plataforma sobre la que la comunidad pueda construir.
Modularización
El cambio más notable es que Babel ha sido completamente reestructurado para ser lo más modular posible, y todos los transformadores han sido reescritos como plugins usando la misma API que se expone a todos.
Todos los componentes internos también se han extraído en paquetes separados, cada uno definiendo una API pública ligera que puede usarse independientemente de todo lo demás.
Si quieres construir algo con algunos componentes internos de Babel, ahora simplemente puedes instalar el paquete y tener acceso completo a ellos. Dentro del directorio de paquetes encontrarás todos los paquetes y plugins existentes.
Plugins opcionales
Dado que Babel se enfoca en ser una plataforma para herramientas JavaScript y no solo un transpilador de ES2015, hemos decidido que todos los plugins sean opcionales. Esto significa que al instalar Babel ya no transpilará tu código ES2015 por defecto.
Para simplificar drásticamente la API pública de Babel, cada transformador es ahora completamente independiente. Esto significa que las opciones 'blacklist', 'whitelist', 'optional', 'nonStandard' y 'modules' han sido eliminadas, pero eso no implica que necesites hacer más trabajo para que Babel transforme tu base de código.
Preajustes de plugins
Dado que especificar y mantener docenas de transformadores en un archivo de configuración sería mucho trabajo, Babel 6 introduce el concepto de Preajustes de Plugins que agrupan plugins similares para facilitar su uso.
$ npm install --save-dev babel-preset-es2015
{
“presets”: [“es2015”]
}
Los preajustes oficiales incluidos hoy son babel-preset-es2015 y babel-preset-react, pero esperamos que haya muchos más en el futuro.
También añadimos presets para etapas como babel-preset-stage-0 (que en Babel 5.x se configuraba como stage: 0 en .babelrc).
Mejoras de rendimiento
El rendimiento sigue siendo una de las máximas prioridades de Babel. Babel 5 modificó drásticamente la pipeline de transformación y recorrido para sentar las bases de importantes mejoras de rendimiento implementadas ahora en Babel 6.
El proceso de recorrido (traversal) es uno de los mayores consumidores de tiempo en la pipeline de Babel. Con cualquier herramienta basada en AST, es crucial minimizar los recorridos del árbol para mantener la velocidad. Los plugins se diseñaron bajo este principio para ser extremadamente rápidos al interactuar con otros componentes.
Babel 6 implementa una nueva optimización que combina todos los plugins en un único recorrido. Gestiona completamente este proceso, liberando a los plugins de la necesidad de hacerlo manualmente. Como desarrollador, puedes centrarte únicamente en crear tu transformación mientras Babel maneja el resto.
API de Plugins
Recibimos numerosos comentarios sobre la confusión generada por la API de plugins, así que en Babel 6 la hemos simplificado. Nota: este es un cambio incompatible (breaking change), pero reducirá significativamente la confusión.
Babel 5
export default function({ Plugin, types: t }) {
return new Plugin(‘ast-transform’, {
visitor: { … }
});
}
Babel 6
export default function({ types: t }) {
return {
visitor: { … }
};
}
Autores de Plugins: Al actualizar vuestros plugins, recordad incrementar la versión mayor (major) ya que esto hace que Babel 5 y 6 sean incompatibles. ¡La semántica de versionado (Semver) es crucial!
Propuestas nuevas/actualizadas
Han surgido varias propuestas actualizadas de TC39. Babel 6 incorpora las últimas revisiones de decoradores, propiedades de clase y otras características experimentales.
Para finalizar
Esta es una versión realmente emocionante para nosotros.
Cualquiera que haya participado en un proyecto open source sabe que implica un trabajo enorme, pero al final es increíblemente gratificante poder devolver a la comunidad incluso la más mínima contribución.
Sebastian estuvo literalmente toda la noche despierto terminando los últimos detalles para lanzar Babel 6 durante su keynote en EmberCamp. Mientras escribo esto en San Francisco son la 1am y redacto esta entrada lo más rápido posible, escuchando música EDM para mantenerme despierto.
Quiero agradecer a todos quienes han ayudado, incluso mínimamente, con Babel. Un enorme reconocimiento a Logan Smyth (@loganfsmyth), Henry Zhu (@hzoo), Jesse McCarthy (@jmm) y Denis Pushkarev (@zloirock) por su arduo trabajo gestionando incidencias y contribuyendo a Babel.
Estamos entusiasmados de lanzar finalmente Babel 6 al mundo. Como siempre, seguimos comprometidos a convertir Babel en la mejor herramienta posible, ¡así que seguid enviando incidencias y pull requests en GitHub!