Projets TypeScript
Le générateur de projet TypeScript permet de créer une bibliothèque ou une application moderne TypeScript configurée avec les meilleures pratiques comme les modules ECMAScript (ESM), les références de projet TypeScript, Vitest pour l’exécution des tests et ESLint pour l’analyse statique.
Utilisation
Générer un projet TypeScript
Vous pouvez générer un nouveau projet TypeScript de deux manières :
- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)
dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - ts#project
- Remplissez les paramètres requis
- Cliquez sur
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
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
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
Options
Paramètre | Type | Par défaut | Description |
---|---|---|---|
name Requis | string | - | TypeScript project 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. |
Résultat du générateur
Le générateur créera la structure de projet suivante dans le répertoire <directory>/<name>
:
Répertoiresrc Code source TypeScript
- index.ts
- project.json Configuration du projet et cibles de construction
- tsconfig.json Configuration TypeScript de base pour ce projet (étend le tsconfig.base.json racine de l’espace de travail)
- tsconfig.lib.json Configuration TypeScript pour votre bibliothèque (code exécuté ou empaqueté)
- tsconfig.spec.json Configuration TypeScript pour vos tests
- vite.config.ts Configuration pour Vitest
- eslint.config.mjs Configuration pour ESLint
Vous remarquerez également des modifications dans les fichiers suivants à la racine de votre espace de travail :
- nx.json La configuration Nx est mise à jour pour configurer le plugin @nx/js/typescript pour votre projet
- tsconfig.base.json Un alias TypeScript est configuré pour votre projet afin qu’il puisse être importé par d’autres projets
- tsconfig.json Une référence de projet TypeScript est ajoutée pour votre projet
Écrire du code TypeScript
Ajoutez votre code TypeScript dans le répertoire src
.
Syntaxe d’import ESM
Comme votre projet TypeScript est un module ES, assurez-vous d’utiliser la syntaxe ESM correcte dans vos imports, en spécifiant explicitement l’extension de fichier :
import { sayHello } from './hello.js';
Exporter pour d’autres projets TypeScript
Le point d’entrée de votre projet TypeScript est src/index.ts
. Vous pouvez y exporter les éléments que vous souhaitez rendre disponibles pour d’autres projets :
export { sayHello } from './hello.js';export * from './algorithms/index.js';
Importer votre bibliothèque dans d’autres projets
Les alias TypeScript pour votre projet sont configurés dans le tsconfig.base.json
de l’espace de travail, ce qui permet d’importer votre projet depuis d’autres projets TypeScript :
import { sayHello } from ':my-scope/my-library';
Lorsque vous ajoutez un import vers un nouveau projet pour la première fois, une erreur peut apparaître dans votre IDE :
Erreur d’importation
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)
Cela signifie qu’une référence de projet n’est pas encore configurée.
Les projets TypeScript sont préconfigurés avec le générateur Nx TypeScript Sync. Exécutez simplement la commande suivante pour ajouter la configuration nécessaire :
pnpm nx sync
yarn nx sync
npx nx sync
bunx nx sync
Après cela, l’erreur devrait disparaître et votre bibliothèque sera utilisable.
Dépendances
Votre projet TypeScript n’a pas de fichier package.json
. Pour ajouter une dépendance, ajoutez-la au package.json
racine de votre espace de travail :
pnpm add -w some-npm-package
yarn add some-npm-package
npm install --legacy-peer-deps some-npm-package
bun install some-npm-package
La dépendance sera alors disponible pour tous les projets TypeScript.
Code exécutable
Pour un usage runtime (ex: handler AWS Lambda), il est recommandé d’utiliser un outil comme esbuild
pour empaqueter le projet et effectuer du tree-shaking.
Ajoutez une cible comme celle-ci dans votre 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" } }, },}
Publication sur NPM
Pour publier sur NPM, vous devez créer un package.json
pour votre projet.
Utilisez le plugin ESLint de vérification des dépendances Nx pour garantir que toutes les dépendances utilisées sont déclarées.
Construction
Le projet est configuré avec une cible build
(définie dans project.json
) :
pnpm nx run <project-name>:build
yarn nx run <project-name>:build
npx nx run <project-name>:build
bunx nx run <project-name>:build
Où <project-name>
est le nom complet de votre projet.
Les artefacts de construction se trouvent dans dist/packages/<my-library>/tsc
.
Tests
Vitest est configuré pour les tests.
Écrire des tests
Placez vos tests dans des fichiers .spec.ts
ou .test.ts
à côté du code source :
Répertoiresrc
- hello.ts Code source
- hello.spec.ts Tests pour hello.ts
Utilisez la syntaxe de type Jest avec describe
, it
, test
et expect
.
import { sayHello } from './hello.js';
describe('sayHello', () => {
it('should greet the caller', () => { expect(sayHello('Darth Vader')).toBe('Hello, Darth Vader!'); });
});
Consultez la documentation Vitest pour plus de détails.
Exécuter les tests
Exécutez tous les tests avec :
pnpm nx run <project-name>:test
yarn nx run <project-name>:test
npx nx run <project-name>:test
bunx nx run <project-name>:test
Ou un test spécifique avec :
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
Les projets utilisent ESLint et Prettier. Configurez-les dans les fichiers racines eslint.config.mjs
et .prettierrc
.
Vérification
Lancez le linter avec :
pnpm nx run <project-name>:lint
yarn nx run <project-name>:lint
npx nx run <project-name>:lint
bunx nx run <project-name>:lint
Correction automatique
Corrigez les problèmes de lint avec :
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
Ou pour tous les projets :
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