Skip to content

Instantly share code, notes, and snippets.

@AlejoDev95
Last active August 25, 2025 15:21
Show Gist options
  • Select an option

  • Save AlejoDev95/27ae1c68682d87527b4f7376d9598c8c to your computer and use it in GitHub Desktop.

Select an option

Save AlejoDev95/27ae1c68682d87527b4f7376d9598c8c to your computer and use it in GitHub Desktop.

Pasos para crear un proyecto de Node + TypeScript + Jest

Primero, es necesario instalar Node. Se puede hacer de las siguientes formas:

  • Usando el instalador de la página oficial: https://nodejs.org/en.

    Se recomienda instalar la versión LTS (Long Term Support).

  • Usando nvm (Node Version Manager): https://github.com/nvm-sh/nvm.

    Es una herramienta que permite tener múltiples versiones de Node instaladas.

    También se recomienda instalar una versión LTS.

Gestores de paquetes

Luego de tener Node, se necesita un gestor de paquetes. Entre las opciones están:

  • npm: viene por defecto al instalar Node.

  • yarn: se instala con el siguiente comando:

    npm install --global yarn
    
  • pnpm: Se instala con los siguientes comandos:

    npm install --global corepack@latest
    
    corepack enable pnpm

Se recomienda leer los pasos de instalación por si han cambiado.

Luego de tener Node y un gestor de paquetes, vamos a seguir los siguientes pasos para crear un proyecto que use Node + TS + Jest:

  1. Crear carpeta e inicializar proyecto:

     mkdir <project_name>
     cd <project_name>
     npm init -y
  2. Instalar dependencias:

    Todas son dependencias de desarrollo

    // Dependencias de Typescript
    npm install -D -E typescript @types/node ts-node-dev tsc-alias tsconfig-paths rimraf
    
    // Dependencias para el testing
    npm install -D -E jest ts-jest @types/jest
    
    // Dependencias para configurar el linter del proyecto
    npm install -D -E eslint prettier eslint-config-prettier eslint-plugin-prettier
  3. Iniciar TypeScript

    npx tsc --init

    Con este comando se va a crear un archivo llamado tsconfig.json.

  4. Configurar el tsconfig.json

    El archivo generado vendrá con varias configuraciones; por el momento vamos a dejar los siguientes ajustes para que nuestro proyecto funcione.

    {
      "compilerOptions": {
        "target": "ES6",
        "module": "esnext",
        "outDir": "./dist",
        "rootDir": "./",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true
      },
      "include": ["src/**/*", "test/**/*"],
      "exclude": ["node_modules", "dist"]
    }
  5. Configuración de los alias path.

    Creamos un archivo llamado tsconfig.paths.json y en él colocamos el siguiente contenido:

    {
      "compilerOptions": {
        "baseUrl": "./",
        "paths": {
          "@src/*": ["src/*"],
          "@test/*": ["test/*"]
        }
      }
    }

    En path podemos configurar todos los alias path que necesitemos.

    Luego volvemos al tsconfig.json para incluir los alias path.

    {
      "extends": "./tsconfig.paths.json", // Agregamos esta linea para incluir los alias path
      "compilerOptions": {
        "target": "ES6",
        "module": "CommonJS",
        "outDir": "./dist",
        "rootDir": "./",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "resolveJsonModule": true
      },
      "include": ["src/**/*", "test/**/*"],
      "exclude": ["node_modules", "dist"]
    }
  6. Configuración de Jest

    Ejecutamos el siguiente comando para crear el archivo de configuración de Jest:

    npx create-jest

    Al ejecutarlo, debemos indicar que estamos usando TypeScript; al finalizar, nos va a crear un archivo llamado jest.config.ts con varias opciones que podemos configurar. Con el fin de simplificar el proceso y poder usar los alias path en nuestras pruebas unitarias, vamos a reemplazar el contenido del archivo jest.config.ts por el siguiente:

    import type { Config } from "jest";
    import { pathsToModuleNameMapper } from "ts-jest";
    import fs from "fs";
    
    const pathAlias = JSON.parse(
      fs.readFileSync("./tsconfig.paths.json", "utf-8")
    );
    
    const config: Config = {
      preset: "ts-jest",
      testEnvironment: "node",
      moduleNameMapper: pathsToModuleNameMapper(
        pathAlias.compilerOptions.paths,
        {
          prefix: "<rootDir>/",
        }
      ),
      moduleDirectories: ["node_modules", "src", "test"],
      roots: ["<rootDir>/test"],
    };
    
    export default config;
  7. Configurar los scripts

    Ahora vamos a configurar los scripts en el package.json para agilizar varios procesos:

    "scripts": {
       "dev": "tsnd --respawn --clear --project tsconfig.json -r tsconfig-paths/register src/app.ts",
       "build": "rimraf ./dist && tsc --project tsconfig.prod.json && tsc-alias",
       "start": "npm run build && node -r tsconfig-paths/register dist/app.js",
       "test": "jest --config jest.config.ts",
       "test:watch": "jest --watch"
     },
  8. Crear un tsconfig.json específico para producción.

    Creamos un archivo con el siguiente nombre tsconfig.prod.json y agregamos el siguiente contenido:

    {
      "extends": "./tsconfig.paths.json",
      "compilerOptions": {
        "target": "ES6",
        "module": "esnext",
        "outDir": "./dist",
        "rootDir": "./",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules", "test/**/*", "dist"]
    }

Con esto ya tenemos un proyecto con las siguientes características:

  • Trabajaremos Node con TypeScript.
  • Realizaremos pruebas unitarias con Jest.
  • Utilizaremos alias path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment