Introducción: ¿Por qué necesitas un CI/CD avanzado para TypeScript?
Un pipeline CI/CD básico que simplemente ejecuta npm test y npm build deja de ser eficiente tan pronto como tu proyecto TypeScript comienza a crecer. El tiempo de compilación aumenta, las pruebas toman horas y la gestión manual de versiones provoca errores. El nivel avanzado de configuración de GitHub Actions permite resolver estos problemas: acelerar el pipeline mediante el caché, ejecutar pruebas en paralelo para diferentes versiones de Node.js y SO, y automatizar el despliegue a producción.
En este artículo, analizaremos tres técnicas clave para proyectos TypeScript: el caché inteligente de node_modules, las compilaciones matriciales para verificar la compatibilidad y el despliegue automático utilizando actions/upload-pages-artifact. Todos los ejemplos están escritos en TypeScript y listos para integrarse en tu repositorio.
1. Caché inteligente de dependencias y compilación
El primer problema de los grandes proyectos TypeScript es la larga instalación de dependencias y la compilación. GitHub Actions proporciona un mecanismo de caché, pero debe configurarse correctamente. En lugar de almacenar en caché toda la carpeta node_modules (lo que puede provocar versiones obsoletas), es mejor almacenar en caché package-lock.json y la carpeta .cache del compilador.
Ejemplo de caché avanzado para TypeScript:
name: TypeScript CI (Advanced)on: [push, pull_request]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Cache TypeScript cache uses: actions/cache@v4 with: path: | **/node_modules **/.tsbuildinfo key: ${{ runner.os }}-ts-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-ts- - run: npm ci - run: npm run build --if-present - run: npm testLa optimización clave aquí es el uso de hashFiles('**/package-lock.json') para generar una clave de caché única. Si package-lock.json no ha cambiado, el caché se restaura en segundos. La bandera --if-present permite omitir el script de compilación si no está definido.
2. Compilaciones matriciales: pruebas en diferentes versiones de Node.js y SO
TypeScript se compila a JavaScript, pero el comportamiento del código puede diferir en diferentes entornos de ejecución. La estrategia matricial de GitHub Actions permite ejecutar el mismo pipeline en múltiples combinaciones de SO y versiones de Node.js. Esto es crítico para bibliotecas y aplicaciones de servidor.
Ejemplo de configuración de matriz para un proyecto TypeScript:
jobs: test: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] node-version: [18, 20, 22] exclude: - os: windows-latest node-version: 22 fail-fast: false
steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npx tsc --noEmit - run: npm test - name: Upload coverage uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.os }}-${{ matrix.node-version }} path: coverage/Puntos clave:
fail-fast: false— no detiene los demás trabajos si uno falla. Permite ver todos los problemas de una vez.exclude— permite excluir combinaciones que se sabe que no funcionan (por ejemplo, Node 22 en Windows, si hay un problema conocido).Blogs
Book Recommendations
Leer también
Importación de JSON en TypeScript: guía completa con ejemplos
Observabilidad en Java: trazado, métricas, logs para profesionales
Seguridad de aplicaciones JavaScript: las 10 principales vulnerabilidades
BDD en Go: Cómo escribir pruebas que entiende el negocio
Code review en Kotlin: qué revisar y cómo dar retroalimentación