Skip to content

chore(repository): include configuration proposals - #1

Open
ddialar wants to merge 1 commit into
franciscomesa:masterfrom
ddialar:proposal-additional-features
Open

chore(repository): include configuration proposals#1
ddialar wants to merge 1 commit into
franciscomesa:masterfrom
ddialar:proposal-additional-features

Conversation

@ddialar

@ddialar ddialar commented Jul 20, 2022

Copy link
Copy Markdown

He añadido algunas propuestas de configuración que yo suelo emplear en mis repos.

Configuraciones adicionales al tsconfig.json

He añadido estas dos propiedades de configuración para TypeScript:

  • resolveJsonModule Permitirá importar contenido de archivos JSON dentro de archivos TypeScript.
  • importsNotUsedAsValues En ocasiones, tenemos archivos en los que hemos definido tipos/interfaces junto con funciones pero a la hora de importar, en muchas ocasiones sólo importamos dichos tipos/interfaces y no los métodos. Con esta propiedad, nos obliga a escribir import type { myType } from '@myModule'. Esto le sirve al compilador de TypeScript para sólo traerse la definición del tipo/interfaz al archivo de destino. Si no lo pusiéramos, se traería todo el contenido del módulo, incluyendo los métodos no utilizados. ¿Y qué pasa con el tree shacking? Pues que se aplica a JavaScript, no al proceso de compilación de TypeScript. De ahí la necesidad de usar este tipo de configuraciones.

Rutas relativas para TypeScript

Creando el archivo tsconfig.paths.json se pueden definir rutas relativas para ser usadas en el código.

Este tipo de rutas proporciona un mejor mantenimiento del código así como refactorizaciones más sencillas, dado que al mover archivos de lugar, sus importaciones no se ven afectadas y en el caso de que haya que actualizar la importación del archivo desplazado, sólo hay que modificar la nueva ruta en el tsconfig.paths.json, no en todos los archivos afectados.

Para que este archivo tenga efecto, es necesario meterlo en el tsconfig.json, mediante la propiedad extedns.

Configuración de Jest para que funcione con rutas relativas

Para que Jest pueda funcionar con las rutas relativas empleadas en el tsconfig.json, tenemos que definir cada path relativo dentro del bloque moduleNameMapper del archivo de configuración de Jest.

Para que esto pueda realizarse de manera automática, he añadido una serie de configuraciones en el archivo jest.config.ts. Finalmente, para que esto tenga efecto, era necesario renombrar la extensión del archivo de js a ts.

Configuración de Jest para que funcione con variables de entorno

Lo más habitual en estos casos es trabajar con dotenv. En este caso, la librería está instalada como librería de desarrollo porque en mi caso, las variables de entorno se las suelo pasar al servicio en el momento de ejecutarlo.

De este modo, he creado el archivo jest.dotenv.config.ts y configurado la propiedad globalSetup en el archivo jest.config.ts. Así, cada vez que se ejecute Jest, se cargarán las variables de entorno definidas en el archivo .env.test.

Scripts en el package.json

He añadido los siguientes scripts:

  • lint:lockfile Permite analizar la estructura del archivo package.lock.json para mejorar la seguridad y evitar posibles problemas por inyección de dependencias desde repositorios no fiables.
  • deps Ejecuta un análisis de las dependencias del repositorio en busca de posibles actualizaciones o amenazas conocidas.
  • release:bug, release:feature y release:breaking_change Permiten actualizar automáticamente las versiones del repositorio.

@ddialar

ddialar commented Jul 20, 2022

Copy link
Copy Markdown
Author

Podría haber añadido la configuración de Husky, con la que también suelo trabajar y tenerla configurada por defecto para mis servicios, pero entiendo que como esta herramienta puede llegar a tener conflictos con determinadas configuraciones de CI/CD, pues no lo he metido.

Si aún así te interesa que lo meta, dímelo y creo otra PR.

Saludos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant