Aller au contenu principal

27-2 Créer un projet et démarrer le serveur d'API

Pour créer un projet, nous pouvons utiliser le CLI nest installé précédemment via l'invite de commande.

Imaginons que nous voulions créer l'API pour l'application Houdini. Assurez-vous d'être dans un dossier où vous désirez mettre le dossier du projet d'API.

  1. Créer le projet via le CLI de nest
nest new houdini-api
  1. Sélectionnez npm comme package manager
? Which package manager would you ❤️  to use? (Use arrow keys)
❯ npm
  1. Soyez patient, l'installation peut prendre un certain temps

Démarrer le serveur manuellement

Pour démarrer le serveur manuellement, assurez-vous d'être dans le dossier du projet d'API que vous venez de créer (ex.: houdini-api) et entrez la commande suivante:

npm run start

Cela devrait avoir démarré le serveur. Pour démarrer en mode développement et en quelque sorte redémarrer automatiquement le serveur lors de changements, vous pouvez faire:

npm run start:dev

Démarrer le serveur via WebStorm

Pour démarrer le projet à même WebStorm, via la flèche verte 'Play', il faut configurer l'action de démarrage en créant une nouvelle configuration.

  1. Assurez-vous que le serveur de développement ne roule pas (celui que vous auriez pu avoir démarré manuellement avec npm run start:dev)

  2. Ouvrez le projet nouvellement créé via WebStorm.

  3. Sous l'onglet Current file, choisir Edit Configurations Imgur

  4. Cliquer sur Add new... Imgur

  5. Choisir npm Imgur

  6. Choisir run sous command et start:dev sous script Imgur

  7. Appuyer sur apply et ensuite OK

  8. Lancez le serveur de développement via la flèche verte play.

Règles eslint

Par défaut, Nest fourni un fichier de base eslint pour garantir une certaine uniformité de la syntaxe de code. De plus, le plugin prettier est installé et utilisé dans les règles eslint, mais ce dernier est beaucoup trop rigide.

Ainsi, modifiez votre fichier eslint.config.mjs par celui-ci pour désactiver prettier, tout en ajoutant certaines règles eslint:

eslint.config.mjs
// @ts-check
import eslint from '@eslint/js';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import globals from 'globals';
import tseslint from 'typescript-eslint';

export default tseslint.config(
{
ignores: ['eslint.config.mjs'],
},
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
{
rules: {
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'warn',
'@typescript-eslint/no-unsafe-argument': 'warn',
'max-len': ['error', {
code: 100,
comments: 80,
ignorePattern: '^import .*'
}],
'semi': ['error', 'always'],
'comma-dangle': ['error', {
"arrays": 'always-multiline',
"objects": 'only-multiline',
"imports": 'never',
"exports": 'never',
"functions": 'never'
}],
'object-curly-spacing': ['error', 'always'],
'linebreak-style': 0
},
},
);