Entonces, unos meses después, estaba listo para intentarlo de nuevo y decidí trabajar primero en la biblioteca Redux Thunk porque es realmente pequeña. Sin embargo, todavía se estaba construyendo con Babel y Rollup, y quería cambiar a usar ESBuild, así que encontré un envoltorio muy bueno llamado TsUp. Pude configurarlo bastante rápido y funciona bastante bien. Es un envoltorio alrededor de ESBuild dirigido a bibliotecas de TypeScript. También tiene la capacidad de generar un archivo ts TypeDefs empaquetado para ti. Así que terminé con este paquete y es mejor, aunque probablemente aún necesita un poco de trabajo desde allí.
Ahora, mencioné anteriormente que enviamos formatos de archivos ES modules, CommonJS y UMD. ¿Qué es un archivo UMD? Universal Module Definition es un formato de módulo realmente extraño que se puede utilizar simultáneamente como un archivo AMD, un archivo CommonJS o una etiqueta de script global. No requiere mucho más esfuerzo mantenerlo, pero se sentía obsoleto y no sabía si deberíamos mantenerlo. Así que busqué, seguí pidiendo consejo y el mejor consejo que encontré fue que probablemente ya no lo necesitaba. Incluso para algo como CodePen, que ahora tiene soporte para ES modules, probablemente no lo necesites. Así que tomé la decisión de eliminar los archivos UMD de nuestros paquetes, aunque los reemplacé con una compilación ESM especial que se ha precompilado en modo de producción, por lo que debería funcionar bien en los navegadores.
Luego descubrí que Webpack 4 no le gustaba la configuración porque, en primer lugar, no admite el campo de exportaciones, tampoco admite el análisis de objetos ES 2018 con sintaxis de propagación o sintaxis de encadenamiento opcional. Y además, no puedes tener un archivo .mjs en el campo principal, también se bloqueará con eso, así que tienes que cambiar a una extensión .js solo para eso. Y el problema es que Webpack 4 todavía se usa bastante ampliamente por una serie de configuraciones de compilación más antiguas. Así que, para tratar de evitar romper el ecosistema, decidí a regañadientes que voy a enviar un artefacto de compilación adicional, formato ESM, pero compilado a ES 2017 con una extensión .js, solo para mantener contento a Webpack 4.
¿Y qué pasa con los typedefs? Bueno, la versión de tsup que estaba usando en ese momento generaba un archivo de definición empaquetado, pero siempre le daba una extensión .d.ts. Y esto es un problema, porque resulta que Are The Types Wrong? lo informa como una advertencia falsa de CJS cuando estás usando la resolución de módulos Node 16. Y hablando con Andrew Branch, resulta que realmente deberías tener archivos separados con una extensión .d.mts y .d.cts, para que TypeScript realmente sepa cómo se ven los tipos cuando se ejecuta en modo ESM versus modo CommonJS, porque puede haber algunas diferencias. Decidí posponer la solución de ese problema por ahora. Todavía es algo que necesito volver a revisar. Andrew Branch presentó una solicitud de extracción para .tsup, para que intente generar diferentes archivos de definición de TypeScript empaquetados. Eso salió en una versión posterior de .tsup y todavía necesito probarlo yo mismo.
Entonces, esto es lo que algunos de los paquetes parecen después del segundo intento, y esto es mejor, creo, pero probablemente aún necesita algunos ajustes. Probablemente necesite hacer alguna anidación para la importación y las condiciones predeterminadas para especificar diferentes archivos de definición de tipo para cada uno de ellos. Ahora, Michel Westray, autor de la biblioteca Imer, había estado trabajando en el desarrollo de Imer-10 durante la primavera, y también estaba tratando de modernizar ese paquete y eliminar algunas cosas de compatibilidad con versiones anteriores, y Redux Toolkit depende mucho de Imer. Así que estaba muy ansioso por probar Imer-10 Beta, pero noté que el tamaño del paquete en realidad aumentó un poco. Eso parecía extraño. Así que, en realidad, descargué, cloné el repositorio de Imer, descargué la rama Beta y lo estuve revisando, y descubrí que estaba usando una herramienta de compilación más antigua llamada TSDX y aún generaba mucha sintaxis de compilación ES5 y muchas cosas extrañas allí.
Comments