Gracias por invitarme. Estoy intentando algo nuevo. Estoy intentando hacer codificación en vivo hoy, así que espero que funcione. Así que, sí, mi nombre es Tobias Koppers y trabajé en Webpack durante 10 años y ahora, junto a Universal, trabajo en TurboPack intentando hacer algo nuevo, algo mejor y sí, estoy intentando centrarme, como he dicho, estoy intentando centrarme en un aspecto de TurboPack e intentar explicar un poco cómo funciona TurboPack o el núcleo de TurboEngine en detalle, así que estoy intentando demostrar algo con eso, así que estoy intentando realmente intentar codificar en vivo en JavaScript un poco del núcleo de TurboEngine.
Así que la motivación de eso es que en las aplicaciones de Webpack vimos que las aplicaciones crecen y crecen, más y más grandes y Webpack, la arquitectura de Webpack no está construida para eso, las compilaciones incrementales tienden a volverse más lentas y más lentas si la aplicación crece. No es un problema tan grande, pero sí, podría convertirse en un problema en unos años cuando las aplicaciones tengan millones de módulos o lo que sea y algunos problemas que aislamos fueron hacemos muchas búsquedas de caché, tenemos que calcular muchas cosas para hacer la validación de caché como verificar si los archivos siguen siendo los mismos, hacer hash de cosas y ese es el problema porque todo este sobrecarga, lo pagas por cada compilación incremental y queremos hacer algo nuevo, una nueva arquitectura para abordar este problema. Y por eso creamos como turbo engine y turbo pack y es una nueva arquitectura y puedo explicarlo un poco haciendo codificación en vivo.
Lo que quiero mostrar es una especie de pequeña aplicación que es súper simple, no un empaquetador sino algo que es similar a un empaquetador, está tomando cualquier aplicación de JavaScript y simplemente copia la aplicación siguiendo el gráfico de dependencias a otra carpeta y al hacerlo también agrega un encabezado de derechos de autor solo para demostrar algo. Con eso, comienzo con la aplicación básica escrita en JavaScript y la explico más tarde y luego intento agregar algo similar a TurboEngine para hacerlo más eficiente, para hacer posibles las compilaciones incrementales de una manera similar a como funciona en TurboPack, en Rust y con TurboEngine. Para eso preparé esta pequeña aplicación, es realmente simple, es solo un montón de Node.js Usamos Acron para obtener el gráfico de dependencias de algo, la ruta allí, los módulos.
Y repaso la aplicación un poco para que la entiendas. El proceso principal es realmente simple, obtenemos el directorio base, como el directorio fuente, tenemos un directorio de salida, y luego tenemos un archivo de entrada que es realmente este archivo que estamos viendo. Así que realmente estamos copiando su propia aplicación a otra carpeta. Y luego comenzamos a seguir el gráfico de dependencias desde ese punto de entrada y copiamos eso del nivel base al nivel de salida. Y otro, para hacerlo un poco más complicado, agrego este archivo de encabezado que básicamente es, déjame mostrarlo, es como una declaración de derechos de autor que debería agregarse a cada archivo para hacerlo un poco más interesante. Así que luego invocamos este tipo de función, copiar gráfico, que básicamente calcula la salida del archivo actual simplemente reubicándolo. Llamando a la función de copia que copia el archivo, súper simple. Y luego llama a otras dos funciones que se llaman obtener referencias que veremos más tarde, es como obtener las referencias, como todos los archivos que han sido importados de un archivo y luego recorrer eso y llamarse a sí mismo recursivamente para simplemente copiar toda la aplicación. Sí. Así que copiar también es bastante simple, leer el encabezado, leer el archivo y escribirlo en otro archivo. Nada súper complicado aquí. Obtener referencias es un poco más complicado pero sí, no es realmente que tengas que entenderlo. Es como llamar a parse para obtener un AST del módulo y como recorrer o hacer algo de magia para extraer las declaraciones de importación y devolver una lista de todos los archivos referenciados por ese tipo de archivo. Parse también es bastante simple usando llamar a Akon, que es una biblioteca de análisis de JavaScript. También leer el archivo obviamente y luego devuelve el AST. Y después de eso comienzo todo y eso debería copiar la aplicación a la nueva carpeta. Así que intentémoslo. Oh. Algunas cosas que quiero explicar. También tengo esta función de tarea que actualmente no está haciendo nada.
Comments