Mise en place d'un projet
Création du projet
Un projet Angular peut se présenter sous deux structures différentes. Une structure “classique” qui ne comprend qu’un unique projet ou bien un workspace pouvant contenir plusieurs applications ou librairies (aussi appelé “monorepo”)
- Structure ‘classique’
ng new [application-name] --routing --style scss --prefix [prefix]- Workspace vide + application (monorepo)
ng new [project-name] --create-application false
ng generate application [application-name] --routing --style scss --prefix [prefix]Si le projet est créé dans un dépôt Git existant, il faut utiliser l’option --skip-git afin de spécifier au CLI d’Angular de ne pas initialiser de dépôt Git.
Il peut aussi être utile de spécifier le package manager à utiliser à l’aide de l’option --package-manager.
Dans des cas plus rares, l’option --new-project-root permet de spécifier le nom du dossier dans lequel les nouvelles applications devront être générées.
Ajout d’ESLint et de Prettier
- Installation d’ESLint
Il est possible d’ajouter facilement ESLint à un projet Angular en executant le schematic fourni :
ng add @angular-eslint/schematicsCela aura pour effet d’installer les dépendances nécessaires et créer le(s) fichier(s) de configuration associé(s).
- Installation de Prettier
- Commencer par installer la package prettier ainsi que les deux plugins nécessaires à son intégration avec ESLint
npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier- Créer un fichier
.prettierrc.jsonà la racine du projet
{
"printWidth": 120,
"singleQuote": true,
"trailingComma": "all",
"bracketSpacing": true,
"overrides": [
{
"files": ".editorconfig",
"options": { "parser": "yaml" }
}
]
}- Exemple de configuration ESLint pour workspace multi-projets
{
"root": true,
"ignorePatterns": ["projects/**/*"],
"overrides": [
{
"files": ["*.ts"],
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates",
"plugin:prettier/recommended"
],
"rules": {}
},
{
"files": ["*.html"],
"extends": ["plugin:@angular-eslint/template/recommended"],
"rules": {}
}
]
}{
"extends": "../../.eslintrc.json",
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts"],
"parserOptions": {
"project": [
"./tsconfig.lib.json",
"./tsconfig.spec.json"
]
},
"rules": {
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-empty-function": "off",
"@angular-eslint/no-output-native": "off",
"@angular-eslint/directive-selector": [
"error",
{
"type": "attribute",
"prefix": "ui",
"style": "camelCase"
}
],
"@angular-eslint/component-selector": [
"error",
{
"type": ["element", "attribute"],
"prefix": "ui",
"style": "kebab-case"
}
]
}
}
]
}Ajout de Stylelint
- Commencer par installer la package stylelint ainsi que sa configuration standard
npm install --save-dev stylelint stylelint-config-standard- Créer un fichier
.stylelintrc.jsonà la racine du projet
{
"extends": "stylelint-config-standard"
}Ajout de Commitlint
- Commencer par installer la package commitlint ainsi que sa configuration standard
npm install -g @commitlint/cli @commitlint/config-conventional- Créer un fichier
commitlint.config.jsà la racine du projet
module.exports = {
extends: ['@commitlint/config-conventional']
}Ajout de Husky
Husky est un outil qui permet de gérer facilement les Hooks Git en exécutant des scripts au format Node.js
- Installation
Il peut s’installer de manière automatique grâce au script d’initialisation
npx husky-init && npm installMais aussi de manière manuelle en exécutant une suite de commandes :
npm install husky --save-dev
npx husky install
npm set-script prepare "husky install"- Création de hooks
Il est nécessaire des hooks afin d’exécuter les linters, les tests au commit et/ou au push.
Pour ajouter une commande à un hook ou en créer un nouveau, utiliser la commande husky add <file> [cmd]
Ajout de Storybook
Storybook est un outil qui peut s’avérer très utile pour visualiser et tester ses composants en isolation. Il s’installe très facilement en exécutant le script d’init :
npx storybook init