Saltearse al contenido

Proyectos de TypeScript

El generador de proyectos TypeScript permite crear bibliotecas o aplicaciones modernas con TypeScript configuradas con mejores prácticas como Módulos ECMAScript (ESM), referencias de proyecto de TypeScript, Vitest para ejecutar pruebas y ESLint para análisis estático.

Uso

Generar un proyecto TypeScript

Puedes crear un nuevo proyecto TypeScript de dos formas:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#project
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    Opciones

    Parámetro Tipo Predeterminado Descripción
    name Requerido string - Library name.
    directory string packages Parent directory where the library is placed.
    subDirectory string - The sub directory the lib is placed in. By default this is the library name.

    Resultado del generador

    El generador creará la siguiente estructura de proyecto en el directorio <directory>/<name>:

    • Directorysrc Código fuente TypeScript
      • index.ts
    • project.json Configuración del proyecto y objetivos de compilación
    • tsconfig.json Configuración base de TypeScript para este proyecto (extiende tsconfig.base.json del espacio de trabajo)
    • tsconfig.lib.json Configuración TypeScript para tu biblioteca (código de ejecución o empaquetado)
    • tsconfig.spec.json Configuración TypeScript para tus pruebas
    • vite.config.ts Configuración para Vitest
    • eslint.config.mjs Configuración para ESLint

    También notarás cambios en los siguientes archivos del directorio raíz:

    • nx.json La configuración de Nx se actualiza para configurar el plugin @nx/js/typescript para tu proyecto
    • tsconfig.base.json Se establece un alias TypeScript para tu proyecto permitiendo su importación desde otros proyectos
    • tsconfig.json Se añade una referencia de proyecto TypeScript para tu proyecto

    Escribiendo código TypeScript

    Añade tu código TypeScript en el directorio src.

    Sintaxis de importación ESM

    Al ser tu proyecto un Módulo ES, usa la sintaxis ESM correcta en las importaciones, incluyendo explícitamente la extensión de archivo:

    index.ts
    import { sayHello } from './hello.js';

    Exportar para otros proyectos TypeScript

    El punto de entrada es src/index.ts. Añade aquí las exportaciones que quieras compartir:

    src/index.ts
    export { sayHello } from './hello.js';
    export * from './algorithms/index.js';

    Importar tu biblioteca en otros proyectos

    Los alias TypeScript configurados en tsconfig.base.json permiten referenciar tu proyecto desde otros:

    packages/my-other-project/src/index.ts
    import { sayHello } from ':my-scope/my-library';

    Al añadir una importación a un nuevo proyecto, podrías ver un error como este:

    Error de importación
    Ventana de terminal
    File '/path/to/my/workspace/packages/my-library/src/index.ts' is not under 'rootDir' '/path/to/my/workspace/packages/my-consumer'. 'rootDir' is expected to contain all source files.
    File is ECMAScript module because '/path/to/my/workspace/package.json' has field "type" with value "module" ts(6059)
    File '/path/to/my/workspace/packages/my-library/src/index.ts' is not listed within the file list of project '/path/to/my/workspace/packages/my-consumer/tsconfig.lib.json'. Projects must list all files or use an 'include' pattern.
    File is ECMAScript module because '/path/to/my/workspace/package.json' has field "type" with value "module" ts(6307)

    Esto ocurre porque falta una referencia de proyecto.

    Los proyectos TypeScript vienen configurados con el generador de sincronización de Nx. Ejecuta este comando para añadir la configuración necesaria:

    Terminal window
    pnpm nx sync

    Tras esto, el error debería desaparecer.

    Dependencias

    Tu proyecto TypeScript no tiene package.json. Para añadir dependencias:

    1. Añádelas al package.json raíz de tu espacio de trabajo usando tu gestor de paquetes:
    Terminal window
    pnpm add -w some-npm-package

    Código de ejecución

    Para usar tu proyecto como código de ejecución (ej: en AWS Lambda), se recomienda usar esbuild para empaquetarlo y aplicar tree-shaking.

    Añade un objetivo como este en project.json:

    {
    ...
    "targets": {
    ...
    "bundle": {
    "cache": true,
    "executor": "nx:run-commands",
    "outputs": ["{workspaceRoot}/dist/packages/my-library/bundle"],
    "options": {
    "command": "esbuild packages/my-library/src/index.ts --bundle --outfile=dist/packages/my-library/bundle/index.js --platform=node --format=cjs"
    }
    },
    },
    }

    Publicar en NPM

    Si publicas tu proyecto en NPM, debes crear un package.json. Usa el plugin ESLint de NX para verificar dependencias.

    Compilación

    El objetivo build compila, verifica y prueba tu proyecto. Ejecútalo con:

    Terminal window
    pnpm nx run <project-name>:build

    La salida se encuentra en dist/packages/<my-library>/tsc.

    Pruebas

    Vitest está configurado para testing.

    Escribir pruebas

    Crea archivos .spec.ts o .test.ts junto a tu código:

    • Directorysrc
      • hello.ts Código fuente
      • hello.spec.ts Pruebas para hello.ts

    Ejemplo de prueba:

    hello.spec.ts
    import { sayHello } from './hello.js';
    describe('sayHello', () => {
    it('debería saludar al usuario', () => {
    expect(sayHello('Darth Vader')).toBe('¡Hola, Darth Vader!');
    });
    });

    Consulta la documentación de Vitest para más detalles.

    Ejecutar pruebas

    Ejecuta todas las pruebas con:

    Terminal window
    pnpm nx run <project-name>:test

    Para pruebas específicas:

    Terminal window
    pnpm nx run <project-name>:test -t 'sayHello'

    Linting

    Los proyectos usan ESLint y Prettier. Configúralos en los archivos raíz eslint.config.mjs y .prettierrc.

    Ejecutar el linter

    Verifica tu proyecto con:

    Terminal window
    pnpm nx run <project-name>:lint

    Corregir problemas

    Corrige automáticamente con:

    Terminal window
    pnpm nx run <project-name>:lint --configuration=fix

    Para todo el espacio de trabajo:

    Terminal window
    pnpm nx run-many --target lint --all --configuration=fix