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:
- Instale el Nx Console VSCode Plugin si aún no lo ha hecho
- Abra la consola Nx en VSCode
- Haga clic en
Generate (UI)
en la sección "Common Nx Commands" - Busque
@aws/nx-plugin - ts#project
- Complete los parámetros requeridos
- Haga clic en
Generate
pnpm nx g @aws/nx-plugin:ts#project
yarn nx g @aws/nx-plugin:ts#project
npx nx g @aws/nx-plugin:ts#project
bunx nx g @aws/nx-plugin:ts#project
También puede realizar una ejecución en seco para ver qué archivos se cambiarían
pnpm nx g @aws/nx-plugin:ts#project --dry-run
yarn nx g @aws/nx-plugin:ts#project --dry-run
npx nx g @aws/nx-plugin:ts#project --dry-run
bunx nx g @aws/nx-plugin:ts#project --dry-run
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:
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:
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:
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
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:
pnpm nx sync
yarn nx sync
npx nx sync
bunx nx sync
Tras esto, el error debería desaparecer.
Dependencias
Tu proyecto TypeScript no tiene package.json
. Para añadir dependencias:
- Añádelas al
package.json
raíz de tu espacio de trabajo usando tu gestor de paquetes:
pnpm add -w some-npm-package
yarn add some-npm-package
npm install --legacy-peer-deps some-npm-package
bun install 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:
pnpm nx run <project-name>:build
yarn nx run <project-name>:build
npx nx run <project-name>:build
bunx 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:
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:
pnpm nx run <project-name>:test
yarn nx run <project-name>:test
npx nx run <project-name>:test
bunx nx run <project-name>:test
Para pruebas específicas:
pnpm nx run <project-name>:test -t 'sayHello'
yarn nx run <project-name>:test -t 'sayHello'
npx nx run <project-name>:test -t 'sayHello'
bunx 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:
pnpm nx run <project-name>:lint
yarn nx run <project-name>:lint
npx nx run <project-name>:lint
bunx nx run <project-name>:lint
Corregir problemas
Corrige automáticamente con:
pnpm nx run <project-name>:lint --configuration=fix
yarn nx run <project-name>:lint --configuration=fix
npx nx run <project-name>:lint --configuration=fix
bunx nx run <project-name>:lint --configuration=fix
Para todo el espacio de trabajo:
pnpm nx run-many --target lint --all --configuration=fix
yarn nx run-many --target lint --all --configuration=fix
npx nx run-many --target lint --all --configuration=fix
bunx nx run-many --target lint --all --configuration=fix