pix icon indicating copy to clipboard operation
pix copied to clipboard

[BSR] Le module Moment.js est déprécié

Open chrc opened this issue 5 years ago • 4 comments

Les applications front et back de Pix utilisent Moment.js.

Celui-ci est maintenant considéré comme endetté (ex. mutabilité, taille élevée) et est en mode maintenance. Ses auteurs recommandent de passer à d'autres projets. cf. https://momentjs.com/docs/#/-project-status

Suggestion

Remplacer Moment.js par un autre module plus petits et plus à jour. cf. https://momentjs.com/docs/#/-project-status/recommendations/

chrc avatar Oct 06 '20 07:10 chrc

TL;DR

Après analyse de la situation, je propose de remplacer Moment.js par Day.js

Discussion

J'ai commencé par regarder les explications de Moment. C'est clair : Moment est mort.

J'ai été interpellé par les API natives Date et Intl qui font le taff pour des besoins simples. J'ai hâte de voir débarquer l'API Temporal.

💡 Les sources semblent concorder pour dire que Intl n'est pas super performant de base, mais qu'une fois la mise en cache effectuée (j'en déduis qu'il y a des mécanismes internes de cache), ça passe.

Par curiosité, je me suis demandé s'il fallait encore utiliser une lib, et Moment.js en particulier. Je suis tombé sur cet article / repo, qui propose des pistes de réflexion intéressantes.

Par la suite, j'ai fait une comparaison sur Npm Trends entre moment, date-fns, dayjset luxon : image

Il semblerait que date-fns soit la meilleure alternative.

J'ai creusé le sujet et suis tombé sur cet article, par quelqu'un qui se présente comme un ancien contributeur active de date-fns et qui recommande de se passer de lib ou de passer par… Day.js.

Je suis plutôt convaincu par son argumentaire, notamment l'argument consistant à dire que "si vous n'êtes pas outillé pour faire du fonctionnel, restez sur une lib OO".

J'ai poussé plus loin la réflexion. J'ai commencé à farfouiller le code de Pix pour me faire une idée. Je me suis restreint pour cette étude aux fichiers projets de Pix API.

❤️ j'adore les scopes de recherches de Webstorm

Y a un gros paquet de correspondances (100+ dans 27+ fichiers) ! image

Pour finir, j'ai regardé si y avait de l'outillage ou des méthodes magiques. Je suis tombé sur cet article qui m'a l'air intéressant à suivre.

Ma conclusion : Moment est mort, remplaçons-le par Day.js.

jbuget avatar Apr 10 '21 08:04 jbuget

Est-ce qu'on ne devrait pas ajouter une couche d'abstraction entre la lib choisie (moment / day / whatever) et notre usage ? Cela permettrait de mieux gérer la dépendance.

HEYGUL avatar Apr 10 '21 08:04 HEYGUL

Dans la mesure où on n'est pas censé changer de lib de gestion de date régulièrement, ça me paraît un peu overkill.

En même temps, si le futur est Temporal et que nous devions vivre en zone transitoire d'ici là (je table sur 2 ou 3 années avant de voir atterrir la spécification et sa mise en œuvre), peut-être que la question se pose effectivement.

Par défaut, je pencherais plutôt pour le "non" tout en étant prêt à me laisser convaincre par le "oui".

jbuget avatar Apr 10 '21 08:04 jbuget

Un des arguments pour serait la plus grande facilité à tester. A voir ce qu'en pense le reste de l'équipe.

HEYGUL avatar Apr 10 '21 09:04 HEYGUL

Fait avec #7673

HEYGUL avatar Dec 20 '23 09:12 HEYGUL