Śmierć Moment.js

2020-11-09

We wrześniu autorzy biblioteki Moment.js ogłosili, że kończą prace nad tym projektem. Od teraz będą jedynie poprawiać oczywiste błędy, natomiast nie będą dodawane nowe funkcje. Dlaczego i co to oznacza, jeśli w jakimś swoim projekcie używam Moment.js?

Po pierwsze - dlaczego. Głównym zarzutem wobec biblioteki jest jej rozmiar. Nie za bardzo poddaje się ona procesowi tree shakingu, który jest używany podczas budowania aplikacji frontendowych np. za pomocą Webpacka, polegający na odrzucaniu tego kodu, który nie jest używany w aplikacji. W efekcie na dzień dobry, dodając zależność do Moment.js, finalny bundle powiększa się o ca 250 kB. Sporo. Problem został już zauważony dawno, powstały alternatywne biblioteki, które są kilku- lub wręcz kilkudziesięciokrotnie “lżejsze” (tutaj znajdziesz dobrą rozpiskę alternatywnych bibliotek).

Po drugie - co robić, jak żyć, jeśli używam Moment.js? Sami autorzy biblioteki przyznają, że jest kilka powodów, dla których nie trzeba od razu rzucać się na wymianę Moment.js na coś innego, m.in. gdy:

  • jeśli znasz tylko/głównie API Moment.js, to gwałtowna zmiana na inną bibliotekę może być trudna (a i projekt z dużą ilością odwołań do Moment.js może być trudny do szybkiego przepisania),
  • jeśli musisz wspierać stare przeglądarki (Moment.js wspiera IE8, czego nie można powiedzieć np. o Luxonie),
  • jeśli inne biblioteki w Twoim projekcie mają zależność od Moment.js - co z tego, że sam przesiądziesz się na co innego, skoro i tak ta inna biblioteka dociągnie Ci całego Momenta? Jeśli chcesz rozważyć alternatywy, to na horyzoncie są m.in.:
  • Luxon,
  • Day.js,
  • date-fns.

Jeśli chodzi o przyszłość, to być może kiedyś w ogóle nie będą potrzebne te biblioteki - jest otwarta propozycja dodania do standardu ECMA globalnej klasy, na wzór Math, która nazywałaby się Temporal i obsługiwałaby całą problematykę dat, czasu i stref czasowych. Pewnie przyjdzie nam na to jeszcze poczekać, ale warto śledzić ten wątek. Moim zdaniem można sparafrazować znane powiedzenie, że najtrudniejsze w programowaniu jest nazywanie zmiennych i unieważnianie cache’a; ja bym dodał: obsługa dat/czasu.


Robert Skarżycki - zdjęcie profilowe

Pisanina, której autorem jest Robert Skarżycki - programista .NET, mąż szczęśliwej żony, rodzic
moje bio
mój Twitter
mój LinkedIn
moje szkolenia i warsztaty

© 2022, Built with Gatsby & passion