|{{:undo-2.svg?30|}}|[[certif:do#procedures|Retour au Dossier Organisationnel]]\\ [[certif:rgpd:installposte]]|
====== Mises à jour (NodeJS, NPM, Angular et Devextreme) ======
===== NodeJS et NPM =====
==== Mettre à jour Node.js ====
- Aller sur le site officiel : [[https://nodejs.org/]]
- Télécharger la version **Current**, pas **LTS**).
- Lancer l'installateur et suivre les instructions.
- Vérifier la version : ''node -v''
==== Mettre à jour npm ====
- ''npm install -g npm@latest''
- Vérifier la version : ''npm -v''
**Pour la librairie, faire cette étape dans chaque lib**
==== Nettoyer et réinstaller les dépendances du projet ====
- Pour une install clean : ''npm ci''
- Si ça bloque :
- Redémarrer son PC (pour qu'il prenne en compte la MàJ de node)
- Supprimer le fichier package-lock.json et le dossier node_modules
- Nettoyer le cache npm : ''npm cache clean --force''
- Réinstaller toutes les dépendances : ''npm install''
**Pour la librairie, revenir à la racine**
==== Vérifier que tout fonctionne ====
- Vérifier la version exacte de Node.js et npm : ''node -v'' puis ''npm -v''
- Tester la compilation : ''.\Compile.bat''
**Pour la librairie, revenir à la racine**
===== Angular =====
- Mettre à jour Angular v18.0 → v19.0 :
- Mettre à jour Angular : ''ng update @angular/core@19 @angular/cli@19''
- à la question « Use application builder ? » faire Espace puis Entrée
- à la question « Provide initializer » faire Entrée
- Mettre à jour Angular v19.0 → v20.0 : suivre :
- Mettre à jour Angular : ''ng update @angular/core@19 @angular/cli@19''
- à la question « Use application builder ? » faire Espace puis Entrée
- à la question « Provide initializer » faire Entrée
- mettre à jourangular/material : ''ng update @angular/material@19''
=== TypeScript ===
* Option 1 : Mettre à jour automatiquement à la dernière version compatible
- ''ng update typescript'' cela mettra à jour TypeScript vers la version recommandée pour ta version actuelle d’Angular.
* Option 2 : Installer une version spécifique (TypeScript 5.8 ou plus pour Angular 20)
- ''npm install typescript@latest --save-dev''
=== Migration du gestionnaire d'erreurs du Router ===
Remplacer le main.ts par :
import { bootstrapApplication } from '@angular/platform-browser';
import { provideHttpClient } from '@angular/common/http';
import { provideRouter, withNavigationErrorHandler } from '@angular/router';
import { AppComponent } from './app.component';
import { ThemeService } from './theme.service';
import { Route } from './app.routes';
// Définition de ton gestionnaire d'erreurs personnalisé
function myCustomErrorHandler(error: any) {
console.error('Navigation error:', error);
}
bootstrapApplication(AppComponent, {
providers: [
provideHttpClient(),
ThemeService,
provideRouter(Route, withNavigationErrorHandler(myCustomErrorHandler)) // ✅ Nouvelle méthode
]
})
.catch((err) => console.error(err));
===== Devextreme =====
- ''npm install devextreme@25.1 --save –save-exact''
- ''npm install devextreme-angular@25.1 --save –save-exact''
- uniquement pour la lib :
- ''npm install devextreme-themebuilder@25.1 --save –save-exact''
- ''npm run build-themes''
===== Régler les potentielles erreur =====
La mise à jour de TypeScript, qui est de moins en moins permissif, entraine des erreurs lors de la compilation ([[https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-8.html|voir la documentation]]).\\ La mise à jour de Devextreme également, entraine pour sa part, des erreurs liées à certaines propriétés des composants de sa bibliothèque qui sont désormais dépréciés ou inexistants.\\ La mise à jour de Angular, provoque des erreurs liées aux usages des method et variables.
exemples d'erreur remontées :
^ Erreur n°1 ^^
|Erreur|**//Argument of type 'string | number | Date | null' is not assignable to parameter of type 'string | number | Date'.\\ Type 'null' is not assignable to type 'string | number | Date'. [plugin angular-compiler]//**|
|Explication|Le ''$event'' peut potentiellement être de type ''null'', hors, dans la méthode on n'attend pas ce type d'argument.\\ Il faut ajouter le type ''null'' et le gérer. |
|HTM/TS|date-box-field.component.html:\\ (valueChange)="handleDateBoxFieldChanged($event)"\\ date-box-field.component.ts: handleDateBoxFieldChanged(itemValue: Date | number | string ) {
this.item.valueString = this.item.formatDateOnly(new Date(itemValue));
this.item.value = this.item.valueString;
this.dateBoxFieldChange.emit(this.item);
}|
|Correction|handleDateBoxFieldChanged(itemValue: Date | number | string | null) {
if(!itemValue) {
this.item.valueString = '';
}else {
this.item.valueString = this.item.formatDateOnly(new Date(itemValue));
}
this.item.value = this.item.valueString;
this.dateBoxFieldChange.emit(this.item);
}|
^ Erreur n°2 ^^
|Erreur|**//This condition will always return true since this function is always defined.\\ Did you mean to call it instead? [plugin angular-compiler]//**|
|Explication|Erreur lors de l'appel de la méthode.\\ Oubli des parenthèses |
|HTML/TS|detail-personne-informations.component.html:\\ @if (DG.isDroitsFichierLectureComptable) {...}|
|Correction|@if (DG.isDroitsFichierLectureComptable()) {...}|
^ Erreur n°3 ^^
|Erreur|**//Can't bind to 'closeOnOutsideClick' since it isn't a known property of 'dx-popup'.\\
1. If 'dx-popup' is an Angular component and it has 'closeOnOutsideClick' input, then verify that it is included in the '@Component.imports' of this component.\\
2. If 'dx-popup' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@Component.schemas' of this component to suppress this message.\\
3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@Component.schemas' of this component. [plugin angular-compiler]//**|
|Explication|''closeOnOutsideClick'' est déprécié depuis la version 24 de Devextreme, mais ne générait pas d'erreur\\ ''hideOnOutsideClick'' remplace désormais cette propriété dans les DxPopup|
|HTML/TS|logeas-grid.component.html:\\ [closeOnOutsideClick]="false" |
|Correction|[hideOnOutsideClick]="false" |
^ Erreur n°4 ^^
|Erreur|**//LoadIndicateurModule is not used within the template of FichierMailingComponent//**|
|Explication|Tous les imports non utilisés provoqueront un **Warning**.|
|Correction|Penser à nettoyer son code et à supprimer les imports qui ne sont plus nécessaires|
^Erreur n°5^^
|Erreur|**//Compiling with Angular sources in partial compilation mode.WARNING: ▲ [WARNING] Deprecation [plugin angular-sass]\\ Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.\\ Use color.alpha instead.\\ [[https://sass-lang.com/d/import|More info and automated migrator]]//**|
|Explication|L'utilisation des variables dans le scss doivent être modifiés pour correspondre aux attentes de SASS qui lancera sa mise à jour prochainement|
|CSS|''color: rgba($base-text-color, alpha($base-text-color) * 0.7);''|
|Correction|''color: rgba($base-text-color, color.alpha($base-text-color) * 0.7);''|
^Erreur n°5^^
|Erreur|**//ompiling with Angular sources in partial compilation mode.WARNING: ▲ [WARNING] Deprecation [plugin angular-sass]\\ Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.\\ [[https://sass-lang.com/d/import|More info and automated migrator]]//**|
|Explication|Les imports dans le scss doivent être modifiés pour correspondre aux attentes de SASS qui lancera sa mise à jour prochainement|
|CSS|''@import "../../themes/generated/variables.additional.scss";''|
|Correction|''@use "../../themes/generated/variables.additional.scss";''|