{"componentChunkName":"component---src-templates-blog-post-js","path":"/blog/smierc-momentjs","result":{"data":{"markdownRemark":{"html":"<p>We wrześniu autorzy biblioteki Moment.js <a href=\"https://momentjs.com/docs/#/-project-status/\">ogłosili, że kończą prace nad tym projektem</a>. 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?</p>\n<p>Po pierwsze - dlaczego. Głównym zarzutem wobec biblioteki jest jej rozmiar. Nie za bardzo poddaje się ona procesowi <em>tree shakingu</em>, 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 <a href=\"https://github.com/you-dont-need/You-Dont-Need-Momentjs/blob/master/README.md\">dobrą rozpiskę alternatywnych bibliotek</a>).</p>\n<p>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:</p>\n<ul>\n<li>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),</li>\n<li>jeśli musisz wspierać stare przeglądarki (Moment.js wspiera IE8, czego nie można powiedzieć np. o Luxonie),</li>\n<li>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?\nJeśli chcesz rozważyć alternatywy, to na horyzoncie są m.in.:</li>\n<li><a href=\"https://moment.github.io/luxon/\">Luxon</a>,</li>\n<li><a href=\"https://day.js.org/\">Day.js</a>,</li>\n<li><a href=\"https://date-fns.org/\">date-fns</a>.</li>\n</ul>\n<p>Jeśli chodzi o przyszłość, to być może kiedyś w ogóle nie będą potrzebne te biblioteki - jest otwarta <a href=\"https://momentjs.com/docs/#/-project-status/future/\">propozycja dodania do standardu ECMA</a> globalnej klasy, na wzór <code class=\"language-text\">Math</code>, która nazywałaby się <code class=\"language-text\">Temporal</code> 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.</p>","excerpt":"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ą…","frontmatter":{"date":"09 November, 2020","path":"/blog/smierc-momentjs","title":"Śmierć Moment.js"},"fields":{"readingTime":{"text":"2 min read"}}}},"pageContext":{}},"staticQueryHashes":["3649515864","63159454"]}