Comienza a Construir tus Propias Herramientas de JavaScript

Rate this content
Bookmark

Tu primera herramienta de JavaScript puede que no sea el próximo Babel o ESLint, ¡pero puede construirse sobre ellos! Vamos a desmitificar el arte secreto de las herramientas de JavaScript, cómo funcionan y cómo construir las nuestras. Descubriremos las oportunidades en nuestro trabajo diario para aplicar estas técnicas, escribiendo nuestras propias reglas de ESLint para prevenir errores y transformaciones de código para facilitar la aplicación de cambios importantes. Recorreremos los fundamentos de trabajar con un árbol de sintaxis abstracta y desarrollaremos nuestra comprensión a través de un código en vivo. Te sorprenderás de lo que puedes construir y juntos exploraremos cómo empezar.

This talk has been presented at JSNation 2023, check out the latest edition of this JavaScript Conference.

FAQ

ESLint es una herramienta que ayuda a los desarrolladores a identificar y corregir problemas en el código, promoviendo mejores prácticas y previniendo anti-patrones. Es crucial para mantener la calidad del código, automatizar la retroalimentación y compartir conocimientos dentro de equipos de desarrollo.

Para escribir una regla personalizada en ESLint, puedes comenzar explorando el árbol de sintaxis abstracta (AST) de tu código utilizando herramientas como AST Explorer, definir el tipo de nodo que te interesa y aplicar condiciones específicas para personalizar la regla según tus necesidades.

AST, o árbol de sintaxis abstracta, es una estructura que representa el código fuente en forma de árbol, permitiendo a herramientas como ESLint analizar y manipular el código de manera eficiente. Se utiliza para detectar patrones específicos y aplicar reglas de linter.

Los code mods permiten automatizar refactorizaciones o cambios en la sintaxis del código, facilitando actualizaciones rápidas y consistentes en bases de código grandes. Se implementan utilizando herramientas especializadas como JS CodeShift, que maneja transformaciones basadas en el AST.

Para dirigir a los desarrolladores hacia nuevas versiones de componentes, se pueden utilizar reglas de ESLint personalizadas que identifiquen y reporten el uso de versiones antiguas durante el desarrollo, combinado con documentación actualizada y anuncios claros.

Astexplorer.net es una herramienta en línea que permite a los desarrolladores explorar y entender el AST de su código. Proporciona un entorno de desarrollo donde puedes escribir, probar y depurar nuevas reglas de ESLint, facilitando la creación de linters personalizados.

Para profundizar en ESLint, se recomienda visitar eslint.org. Para los interesados en code mods, el sitio web de la Comunidad CodeShift ofrece ejemplos, mejores prácticas y herramientas útiles. Además, astsareawesome.com ofrece una revisión rápida y enlaces a recursos adicionales.

Will Klein
Will Klein
22 min
05 Jun, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
[♪ música ♪ de The Illuminati suena)] Veo un hilo común en cualquier proyecto en el que trabajo. Diferentes desarrolladores están cometiendo el mismo error y tenemos formas preferidas de hacer las cosas. Prevenir errores y compartir las mejores prácticas son excelentes razones para considerar herramientas como linters y en particular ESLint. Escribamos nuestra primera regla juntos. Apenas estamos rascando la superficie de la construcción de nuestras propias herramientas, lo cual puede tener un impacto masivo en la mejora de la experiencia del desarrollador.

1. Introducción a la creación de herramientas personalizadas con ESLint

Short description:

[♪ música ♪ de The Illuminati suena)] Veo un hilo común en cualquier proyecto en el que trabajo. Diferentes desarrolladores cometen el mismo error y tenemos formas preferidas de hacer las cosas. Prevenir errores y compartir las mejores prácticas son excelentes razones para considerar herramientas como linters y en particular ESLint. Escribamos nuestra primera regla juntos. Solo estamos rascando la superficie de la construcción de nuestras propias herramientas, lo cual puede tener un impacto masivo en mejorar la experiencia del desarrollador.

[♪ música ♪ de The Illuminati suena)] [♪ música ♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ de The Illuminati suena♪ te mostraré cómo. ¿Qué tal si pudiéramos comenzar a construir nuestras propias herramientas? ¿Por dónde empezaríamos? ¿Y si las herramientas fueran específicas para nuestro proyecto? Únicas y útiles, adaptadas a nuestras necesidades? ¿Y si pudiéramos aprender cómo hacer esto en los próximos 20 minutos, aprendiendo lo que necesitamos saber y cómo dar nuestros primeros pasos? En los próximos 20 minutos, escribamos nuestra primera regla de impresión, escribamos nuestro primer código mod, veamos nuestro primer AST y construyamos nuestra comprensión de ellos, y aprendamos los fundamentos de cómo funcionan nuestras herramientas. Comencemos.

Veo un hilo común en cualquier proyecto en el que trabajo. Diferentes desarrolladores cometen el mismo error y tenemos formas preferidas de hacer las cosas aunque es difícil comunicarlo a todos los demás en nuestro proyecto o que usan nuestra biblioteca. Prevenir errores y compartir mejores prácticas son excelentes razones para considerar herramientas como linters y en particular ESLint. No solo podemos usar las reglas existentes de ESLint para manejar muchos problemas, sino que tiene un rico ecosistema de complementos específicos para diferentes áreas y podemos escribir nuestras propias reglas y complementos, lo cual te mostraré cómo hacerlo. Las reglas de ESLint son excelentes para problemas o errores que siguen surgiendo, creando un mejor ciclo de retroalimentación para los desarrolladores mientras escriben su código, automatizando la retroalimentación de la revisión de código, compartiendo mejores prácticas y previniendo anti-patrones en nuestras bases de código. Las reglas pueden ser para cualquier proyecto, tal vez solo para tu aplicación, ayudando a los desarrolladores en tu equipo inmediato u otros en una base de código compartida. Si mantienes una biblioteca, pueden ayudar a cualquier persona que use tu biblioteca. Cualquiera puede escribir estas reglas, no solo los mantenedores del proyecto o los desarrolladores expertos.

Muy bien, escribamos nuestra primera regla juntos. Voy a compartir un poco sobre en qué trabajo y un problema que me gusta resolver y que creo que sería realmente útil. En este momento, trabajo en un sistema de diseño llamado Canvas y proporcionamos una biblioteca de componentes para que los desarrolladores de UI la utilicen. Invertimos mucho en hacer que nuestros componentes sean accesibles y útiles en una amplia gama de casos de uso. Como parte de ese esfuerzo, mantenemos tres paquetes diferentes para nuestros componentes, principal, vista previa y laboratorios. Por lo general, construimos nuevos componentes en laboratorios o vista previa, y a medida que probamos la API, refinamos diseño y nos aseguramos de que la accesibilidad esté perfeccionada, promovemos las cosas de laboratorios y vista previa a principal. Sin embargo, esto presenta un desafío algo único. Tenemos algunos componentes antiguos, generalmente en principal, que serán reemplazados por versiones más nuevas en laboratorios o vista previa. Cuando un desarrollador está eligiendo entre las dos versiones, ¿por cuál se decide? A veces, realmente queremos decirles a los desarrolladores que usen la versión más nueva en laboratorios o vista previa. Ya planeamos promoverlo a principal en una próxima versión. El componente está listo para usar y tiene algunos beneficios que no queremos que nuestros usuarios se pierdan en. ¿Cómo comunicamos esto? Hacemos lo que podemos con nuestra documentación y enviando anuncios, pero la mejor manera es decírselo mientras escriben su código. Estoy abriendo una herramienta en línea que uso para probar nuevas reglas. Por lo general, desarrollo con un conjunto de pruebas escribiendo, las reglas de Lint son un caso de uso realmente bueno para el desarrollo impulsado por pruebas. Esta herramienta es excelente para explorar el problema, obtener un primer borrador y a menudo eso es suficiente. Esto es astexplorer.net. Aquí hay algunas cosas sucediendo, pero explicaré cómo funciona cada parte. A la izquierda, hay dos editores colocados para el código en el que estamos trabajando en la parte superior izquierda y un editor para escribir una regla de AS Lint debajo y otras herramientas también. A la derecha, tenemos un visor de AST arriba y una ventana de salida para depurar debajo de eso.

Read also

2. Comprendiendo AST y Código de Ejemplo

Short description:

En el encabezado, podemos configurar el analizador y el tipo de transformación. El visor de AST es increíble y lo exploraremos. Un AST es simplemente un árbol que almacena la sintaxis de nuestro código. Podemos decirle a ESLint qué nos importa especificando los tipos de nodos. Al observar esto, obtenemos todo lo que necesitamos para detectar patrones. Veamos un código de ejemplo que incluye importaciones para nuestros componentes. Tenemos una situación no preferida con un componente de control segmentado. Cuando seleccionamos la transformación para ESLint V8, obtenemos un código de ejemplo con una función create que devuelve un objeto literal.

En el encabezado, también podemos configurar el analizador y el tipo de transformación, que ya he establecido en el analizador Babel AS Lint y AS Lint v8. Además de brindarnos un entorno de desarrollo realmente útil, este visor de AST en la parte superior derecha es increíble y lo exploraremos en un momento.

AST es un acrónimo de abstract syntax tree (árbol de sintaxis abstracta). Si no estudiaste ciencias de la computación en la universidad, la terminología para un AST puede parecer intimidante. Pero te prometo que es solo un árbol y si has trabajado con un DOM para una página web, sabes cómo funciona un árbol. Un AST simplemente almacena la sintaxis de nuestro código. Podemos explorar este árbol en el AST Explorer. También vale la pena mencionar que el árbol es básicamente un objeto JavaScript. No hay nada realmente nuevo aquí. Al igual que una etiqueta HTML en la parte superior de una página web, que es el nodo superior del árbol en el DOM, la parte superior del AST es el nodo del programa. Este nodo del programa tiene nodos secundarios como los que están debajo de body. Aquí tenemos múltiples declaraciones de importación y estas declaraciones de importación tienen nodos secundarios propios y así sucesivamente. Hay otro tipo de propiedad en un nodo que es muy importante, el tipo. Así es como le diremos a ESLint qué nos importa. Le diremos esto para este tipo de nodo. Queremos saber sobre él y ESLint se encargará de recorrer el árbol y cada vez que encuentre un nodo que nos importa, lo pasará a una función que podemos controlar y definir. También hay algunas propiedades para describir cada nodo, como el tipo de origen que es módulo en el programa. Hay otros valores que podemos ver que pueden ser realmente útiles dependiendo del nodo con el que estemos trabajando. Al observar esto, obtenemos todo lo que necesitamos para detectar patrones, que es lo que hace una regla de ESLint.

Veamos un código de ejemplo que incluye importaciones para nuestros componentes. En la parte superior izquierda tenemos algunos ejemplos diferentes, en realidad unos pocos. Primero tenemos la situación no preferida donde tenemos un componente de control segmentado que proviene de nuestro paquete principal CanvasKit React aquí. Eso no es preferido porque tenemos uno más nuevo en CanvasKit Preview React. Este es nuestro paquete de vista previa. Queremos dirigir a los desarrolladores a usar eso en lugar de nuestro paquete principal en algún momento. Cuando seleccionamos la transformación para ESLint V8, obtenemos un código de ejemplo en la parte inferior izquierda. Esto es genial porque nos dará un punto de partida. Lo he limpiado un poco hasta lo esencial. Lo que tenemos es una función create. Esta función create devuelve un objeto literal.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Vite: Repensando las Herramientas de Frontend
JSNation Live 2021JSNation Live 2021
31 min
Vite: Repensando las Herramientas de Frontend
Top Content
Vite is a next-generation build tool that leverages native ES modules for improved performance. It eliminates the need for bundling and improves hot module replacement. Vite provides an opinionated default configuration while still allowing advanced customization through plugins. It is framework agnostic and can be used for React and other applications. Vite is being adopted by Next.js and Create React App, and integration with Nuxt 3 offers significant speed improvements.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
Turbopack. ¿Por qué? ¿Cómo? ¿Cuándo? y la Visión...
React Day Berlin 2022React Day Berlin 2022
32 min
Turbopack. ¿Por qué? ¿Cómo? ¿Cuándo? y la Visión...
The Talk discusses TurboPack, a successor to Webpack, aiming to create a framework-independent, flexible, and extensible tool for the open-source community. It addresses performance challenges by integrating SWC into Next.js. The challenges with Next.js and Webpack include orchestration issues, backward compatibility constraints, and cache invalidation problems. TurboEngine and TurboPack provide constant performance in incremental builds, leveraging Rust's predictable performance and parallelism. The Talk also covers topics like dependency tracking, task graphs, cache invalidation, lazy asset graphs, and the integration of TurboPack with Next.js. The future plans involve reconfiguring Webpack and TurboEngine, moving computations to the cloud, providing insights into builds, and facilitating migration and integration with JavaScript projects.
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
React Day Berlin 2022React Day Berlin 2022
9 min
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
BUN is a modern all-in-one JavaScript runtime environment that achieves new levels of performance. It includes BUN dev, a fast front-end dev server, BUN install, a speedy package manager, and BUN run, a fast package runner. BUN supports JSX, has optimized React server-side rendering, and offers hot module reloading on the server. The priorities for BUN include stability, node compatibility, documentation improvement, missing features in BUN install, AST plugin API, native Windows support, Bundler and Minifier optimization, and easier deployment to production. BUN's AST plugin API allows for bundle-time JavaScript execution and embedding code, potentially inspiring new frameworks.
El Núcleo de Turbopack Explicado (Codificación en Vivo)
JSNation 2023JSNation 2023
29 min
El Núcleo de Turbopack Explicado (Codificación en Vivo)
Tobias Koppers introduces TurboPack and TurboEngine, addressing the limitations of Webpack. He demonstrates live coding to showcase the optimization of cache validation and build efficiency. The talk covers adding logging and memorization, optimizing execution and tracking dependencies, implementing invalidation and watcher, and storing and deleting invalidators. It also discusses incremental compilation, integration with other monorepo tools, error display, and the possibility of a plugin system for Toolpag. Lastly, the comparison with Bunn's Builder is mentioned.

Workshops on related topic

Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
WorkshopFree
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
Soluciona el 100% de tus errores: Cómo encontrar problemas más rápido con la Reproducción de Sesiones
JSNation 2023JSNation 2023
44 min
Soluciona el 100% de tus errores: Cómo encontrar problemas más rápido con la Reproducción de Sesiones
WorkshopFree
Ryan Albrecht
Ryan Albrecht
¿Conoces ese molesto error? ¿El que no aparece localmente? Y no importa cuántas veces intentes recrear el entorno, no puedes reproducirlo. Has revisado las migas de pan, leído la traza de pila y ahora estás jugando al detective para unir los tickets de soporte y asegurarte de que sea real.
Únete al desarrollador de Sentry, Ryan Albrecht, en esta charla para aprender cómo los desarrolladores pueden utilizar la Reproducción de Sesiones, una herramienta que proporciona reproducciones de video de las interacciones de los usuarios, para identificar, reproducir y resolver errores y problemas de rendimiento más rápido (sin golpear tu cabeza contra el teclado).
Construye aplicaciones similares a React para herramientas internas 10 veces más rápido con Retool
JSNation Live 2021JSNation Live 2021
86 min
Construye aplicaciones similares a React para herramientas internas 10 veces más rápido con Retool
Workshop
Chris Smith
Chris Smith
La mayoría de las empresas tienen que construir software personalizado e interfaces a medida para sus datos con el fin de impulsar procesos internos como extensiones de prueba de usuario, reembolsos, gestión de inventario, administración de usuarios, etc. Estas aplicaciones tienen requisitos únicos y a menudo, resolver el problema rápidamente es más importante que la apariencia. Retool facilita a los desarrolladores de JavaScript construir rápidamente aplicaciones similares a React para herramientas internas utilizando interfaces de API y base de datos preconstruidas, así como componentes de interfaz de usuario reutilizables. En este masterclass, repasaremos cómo algunas de las empresas de más rápido crecimiento están haciendo herramientas internas y construiremos algunas aplicaciones simples para explicar cómo Retool funciona a partir de tus conocimientos existentes de JavaScript y ReactJS para permitir la construcción rápida de herramientas.
Prerrequisitos:Una cuenta de prueba gratuita en Retool.comAlgunos conocimientos básicos de JavaScript y bases de datos SQL/NoSQL
Enlace útil de Retool: https://docs.retool.com/docs