Jusqu'à maintenant, nous ne pouvions pas utiliser les dernières versions de Node pour la partie frontend dû à une incompatbilité avec la version trop ancienne de react-scripts (3.x). Node 16 était la dernière version compatible.
Node 16 n'étant désormais plus maintenu, il est temps de mettre à jour ces dépendances.
Mise à jour de react-scripts vers la dernière version (5.x). Celle-ci requiert l'utilisation de Node >=18.
Suite à la mise à jour de Node, le comportement de l'import des ressources a changé. Avant, il était possible de faire
import * as resources from './resources';
et l'ordre des de l'écriture des exports était conservé dans le fichier. En Node >=18 ce n'est plus le cas, les exports sont désormais triés par ordre alphabétique. J'ai donc exportés les ressources sous forme d'objet plutôt. Il est toutefois nécessaire désormais de changer la ligne d'importation par
import resources from './resources';
Mise à jour mineure de React-admin pour prendre en compte les dernières corrections et évolutions du framework
Ajout dans le package.json du frontend (comme du middleware) la version minimale de Node pour lancer le projet (c'est-à-dire node 18, même si c'est recommandé de le lancer en node 20 vu que c'est la dernière LTS). C'est le seul changement effectué côté middleware qui fonctionnait déjà très bien en node 18 ou node 20.
react-scripts 5 intégrant des règles eslint plus contraignantes, j'ai effectué des modifications dans quelques fichiers pour supprimer les warnings au démarrage de l'app. (j'ai commenté deux warnings au lieu de les corriger, ça nécessitera de repasser sur certains composants ultérieurement)
Mise à jour des images Docker générées pour prendre la dernière version LTS de Node (qui n'expirera qu'en 2025). J'ai également effectué deux autres modifications dans ces images :
Utilisation de yarn --frozen-lockfile pour figer les dépendances avec le fichier yarn.lock qui est commité dans le repo. Ca permet de ne pas avoir de mauvaises surprises lors de la génération de l'image si une dépendance a été mise-à-jour.
Utilisation de yarn --production pour ne pas installer les dépendances de dev (notamment dans les sous-dépendances du repo). Cela permet d'avoir moins de dépendances installées dans l'image, et ainsi d'optimiser sa taille (mais c'est minime, une évolution future des Dockerfile sera d'utiliser les multi-staged build de Docker pour approcher plutôt des 300Mo au lieu des 1Go aujourd'hui, mais pour ça il reste quelques étapes à effectuer dans l'application avant)
Déplacement de react-scripts des dev-dependencies vers les dependencies. Ca n'a aucune incidence vu que l'app est une app finale et non une library pouvant être incluse. Cependant, ça permet d'effectuer un yarn install --production dans le Dockerfile en gardant la possibilité de rebuild ensuite. C'est important pour deux cas :
Image Docker de développement
Image Docker générique sans connaissance préalable des variables d'environnement (ce n'est pas le cas dans les Dockerfile contenu dans ce repo, mais celles-ci vont pouvoir être améliorées par la suite pour les rendre plus génériques)
Je précise également que malgré la mise à jour à la dernière version, react-scripts est désormais déprécié. Une prochaine mise à jour majeure d'Archipelago sera nécessaire afin d'utiliser par exemple Vite à la place (et en profiter pour convertir le projet en Typescript)
Hello,
Jusqu'à maintenant, nous ne pouvions pas utiliser les dernières versions de Node pour la partie frontend dû à une incompatbilité avec la version trop ancienne de react-scripts (3.x). Node 16 était la dernière version compatible.
Node 16 n'étant désormais plus maintenu, il est temps de mettre à jour ces dépendances.
⚠️ Cette PR contient des breaking changes ⚠️
Idéalement, ne pas la merger sur next tant qu'on a pas décidé ce qu'on en fait (voir https://github.com/assemblee-virtuelle/archipelago/issues/152)
Changements effectués
Suite à la mise à jour de Node, le comportement de l'import des ressources a changé. Avant, il était possible de faire
et l'ordre des de l'écriture des exports était conservé dans le fichier. En Node >=18 ce n'est plus le cas, les exports sont désormais triés par ordre alphabétique. J'ai donc exportés les ressources sous forme d'objet plutôt. Il est toutefois nécessaire désormais de changer la ligne d'importation par
Mise à jour mineure de React-admin pour prendre en compte les dernières corrections et évolutions du framework
Ajout dans le package.json du frontend (comme du middleware) la version minimale de Node pour lancer le projet (c'est-à-dire node 18, même si c'est recommandé de le lancer en node 20 vu que c'est la dernière LTS). C'est le seul changement effectué côté middleware qui fonctionnait déjà très bien en node 18 ou node 20.
react-scripts 5 intégrant des règles eslint plus contraignantes, j'ai effectué des modifications dans quelques fichiers pour supprimer les warnings au démarrage de l'app. (j'ai commenté deux warnings au lieu de les corriger, ça nécessitera de repasser sur certains composants ultérieurement)
Mise à jour des images Docker générées pour prendre la dernière version LTS de Node (qui n'expirera qu'en 2025). J'ai également effectué deux autres modifications dans ces images :
Utilisation de
yarn --frozen-lockfile
pour figer les dépendances avec le fichier yarn.lock qui est commité dans le repo. Ca permet de ne pas avoir de mauvaises surprises lors de la génération de l'image si une dépendance a été mise-à-jour.Utilisation de
yarn --production
pour ne pas installer les dépendances de dev (notamment dans les sous-dépendances du repo). Cela permet d'avoir moins de dépendances installées dans l'image, et ainsi d'optimiser sa taille (mais c'est minime, une évolution future des Dockerfile sera d'utiliser les multi-staged build de Docker pour approcher plutôt des 300Mo au lieu des 1Go aujourd'hui, mais pour ça il reste quelques étapes à effectuer dans l'application avant)Déplacement de react-scripts des dev-dependencies vers les dependencies. Ca n'a aucune incidence vu que l'app est une app finale et non une library pouvant être incluse. Cependant, ça permet d'effectuer un
yarn install --production
dans le Dockerfile en gardant la possibilité de rebuild ensuite. C'est important pour deux cas :Je précise également que malgré la mise à jour à la dernière version, react-scripts est désormais déprécié. Une prochaine mise à jour majeure d'Archipelago sera nécessaire afin d'utiliser par exemple Vite à la place (et en profiter pour convertir le projet en Typescript)