Головна / Статті

Відмова від застарілих залежностей JavaScript: CRA, Moment, jQuery та інші

Які застарілі бібліотеки та інструменти JavaScript варто поступово відмовитися від них, чому кожен з них став проблемою, що може їх замінити, та як не дозволити списку залежностей знову псуватися.

Видавець: REACTAPP.TOP6 хв читання1411 слів

Джерела: **JavaScript Libraries and Tools Heading Toward Deprecation: What to Drop in 2026**

Більшість проектів на JavaScript мають кілька залежностей, які були очевидним вибором під час створення репозиторію, але тепер є зайвим тягарем: великі пакети, непоправлені вразливості, проблемні сумісності з сучасними середовищами виконання чи функції, які платформа тепер надає безкоштовно. Жодна з них не призводить до краху миттєво, саме тому вони й залишаються. У цьому посібнику розглядаються бібліотеки та інструменти, які вже застаріли, знаходяться у режимі підтримки чи поступово втрачають актуальність; пояснюється, чому кожен з них відстає, та наводяться альтернативи, до яких варто звернутися, щоб можна було планувати міграцію свідомо, а не під тиском.

Інструменти для створення та скелету проекту

Create React App

Протягом багатьох років Create React App (CRA) був інструментом для створення React-проєктів. На початку 2025 року команда React офіційно припинила підтримку цього інструменту як основи для нових додатків, і він більше не отримує значущих оновлень, тож проблеми з безпекою в його інструментальному комплексі залишаються нерозв’язаними. Кількість завантажень стрімко знижується, оскільки команди переходять на інші рішення.

Основні причини є структурними: ніхто активно не підтримує цей інструмент, його припущення щодо об’єднання файлів та серверів розробки застаріли, а альтернативи відповідають сучасним вимогам, таким як серверна обробка контенту, швидше створення проєктів та кращий досвід розробника без додаткової налаштування. Хорошими замінниками є:

  • Vite з @vitejs/plugin-react для типових односторінкових додатків
  • Next.js, Remix / React Router або інший повноцінний фреймворк, якщо додатку потрібен маршрутизатор, конвенції отримання даних чи код з боку сервера
  • Parcel або Rsbuild, якщо ви хочете щось легше
  • Оскільки додаток CRA — це переважно стандартний код React разом із прихованою конфігурацією збирання, процес міграції зазвичай виявляється значно простішим, ніж очікують команди: ви замінюєте інструмент збирання, переміщуєте точку входу HTML та змінюєте конвенції змінних середовища, а самі компоненти залишаються недоторканими. Якщо ви починаєте з нуля, посібник у нашому посібнику з налаштування React та Vite охоплює нові стандарти.

    Webpack для нових проектів

    Webpack зовсім не мертвий. Величезна кількість продакшн-застосунків досі створюється за його допомогою, і це незабаром не зміниться. Зменшується лише його частка у нових проектах, переважно через складність конфігурації та повільніший час запуску порівняно з новішими інструментами. Для створення фронтенду з нуля наразі стандартом є Vite, а серед інших хороших варіантів — рішення на основі Rspack та esbuild. Webpack залишається прийнятним варіантом для дуже складних існуючих конфігурацій, але рідко є вибором для нових проектів. Щоб детальніше порівняти ці інструменти, перегляньте вибір бандлера.

    Бібліотеки, які були поглинуті платформою

    Moment.js

    Майже кожен розробник JavaScript колись використовував Moment.js. Його власні адміністратори вже давно описують його як проект минулого, що перебуває у режимі підтримки. Він є великим, його об’єкти за замовчуванням є змінними (що є поширеною причиною помилок, коли дата змінюється в одному місці, а спостерігається в іншому), крім того, він погано піддається оптимізації.

    Функціонал роботи з датами у браузерах покращився, і тепер невеликі незмінні бібліотеки виконують цю роботу з кращою продуктивністю. Ось ваші варіанти, приблизно у порядку пріоритету:

    • Intl.DateTimeFormat для форматування з урахуванням локалі
    • Temporal — новий вбудований API для роботи з датами та часом, на який розробники чекали роками; він поступово впроваджується у різних середовищах виконання та браузерах; перевірте поточну підтримку для вашої мети перед тим, як покладатися на нього
    • date-fns, Luxon або Day.js, якщо бібліотека все ще є доцільною

    Якщо Moment все ще є у вашій дереві залежностей, заплануйте міграцію. Лише зменшення розміру пакета часто є значним.

    jQuery

    У 2010-х роках jQuery вирішив справжні проблеми, які існували між браузерами. Для нового коду сьогодні це майже ніколи не є обґрунтованим, адже стандартизовані API DOM, fetch та фреймворки компонентів покривають усе, що раніше потребувало його використання. Звичайний JavaScript із querySelector, classList, addEventListener та вбудованим fetch виконує більшість прямих операцій з DOM, а React, Vue, Svelte чи Solid беруть на себе обов’язки, коли потрібні інтерфейси на основі компонентів. Старі кодові бази будуть продовжувати використовувати jQuery протягом багатьох років, і це нормально, але його використання у абсолютно новому проекті є ознакою проблем.

    Lodash та Underscore

    До ES2015 бібліотека Lodash була майже обов’язковою. Тепер більшість її функцій мають вбудовані аналоги: методи масивів такі як map, filter та reduce, Object.entries, можливість послідовного оброблення елементів, операція об’єднання значень null та інші. Є складнощі з обґрунтуванням використання всієї бібліотеки або навіть її значних частин лише для кількох функцій. Краще почати з самої мови та додавати спеціалізовані інструменти лише там, де вбудований API справді не вистачає, наприклад для перевірки глибокої рівності чи затримки виконання операцій. У нашій статті про вбудовані функції, які замінюють залежності від додаткових бібліотек наведені конкретні приклади таких замін.

    Тестування та мережеві з’єднання

    Enzyme

    Протягом тривалого часу Enzyme був основним інструментом для тестування компонентів React, але він ніколи добре не пристосовувався до React 18 та його функцій конкурентного виконання, тож його використання різко знизилося. Оскільки Enzyme спонукав до тестування внутрішньої структури компонентів (стану, методів екземпляра, поверхневих дерев рендерингу), міграція частково полягає у зміні мислення. React Testing Library, який рекомендують як спільнота, так і команда React, натомість тестує те, що бачить та робить користувач. Його можна поєднувати з Vitest або Jest як інструментами виконання тестів.

    request та node-fetch v2

    request був офіційно видалений з використання давно, і тепер для нього більше не випускаються патчі з покращеннями безпеки, тож будь-яке його подальше використання становить серйозний ризик. Кількість завантажень node-fetch v2 також різко знизилась, оскільки Node.js 18 та новіші версії постачають вбудовану функцію fetch (у ранніх версіях вона була позначена як експериментальна, тому перевірте її поведінку у вашій версії Node). Використовуйте вбудовану функцію fetch, яка тепер працює у сучасних версіях Node та всіх поточних браузерах. Якщо вам потрібні повторні спроби, інтерцептори чи більш потужне стрімінгове оброблення даних, розгляньте інструменти undici, ky чи got.

    Інші елементи, які варто стежити

    Ще кілька змін заслуговують на включення до вашого списку оновлень:

    • Згідно з графіком випуску, ESLint 9.x досяг кінця свого життєвого циклу у серпні 2026 року; сплануйте перехід на версію v10 та перевірте дати на сайті ESLint.
  • SDK AWS для JavaScript v2 вже не підтримується. Перейдіть на модульні клієнти v3 під @aws-sdk/*, які також дозволяють імпортувати лише ті клієнти, які ви використовуєте.
  • Старіші інструменти, такі як vue-cli та Nuxt 2, фактично вважаються застарілими.
  • У міру модернізації середовища виконання Node.js продовжує скасовувати вбудовані функції та старіші API, тому перед кожним оновленням до нової версії обов’язково ознайомтесь з офіційним списком скасованих елементів.
  • Середовища виконання, такі як Bun, надають більше функціоналу вбудовано, що ще більше зменшує потребу у багатьох невеликих допоміжних пакетах.
  • Процедура для підтримки актуальності залежностей

    Одноразова заміна цих бібліотек недостатня; мета — сформувати звичку, яка запобігатиме накопиченню нових застарілих залежностей.

    1. Регулярно перевіряйте package.json та виконуйте команди npm outdated та npm audit, щоб бачити всі зміни.
  • Віддавайте перевагу вбудованим функціям платформи, як тільки вони стануть стабільними та будуть широко підтримуватися у середовищах, які ви обираєте.
  • Слідкуйте за повідомленнями про виходження з ужитку, які публікують React, Node.js, ESLint та адміністратори ваших основних бібліотек.
  • Вважайте стан „це все ще працює“ тимчасовим. Постійні патчі безпеки та підтримка екосистеми мають більше значення, ніж зручність залишити все як є.
  • Для нових проєктів за замовчуванням використовуйте сучасні інструменти: Vite, вбудований fetch, Temporal у разі підтримки, а також актуальні основні версії фреймворків.
  • Корисний баланс, про який варто пам’ятати: не кожна застаріла залежність потребує негайної переробки. Стабільний внутрішній інструмент, який використовує jQuery чи Webpack, може коштувати більше на міграцію, ніж коли-небудь заощадить. Визначайте пріоритети за рівнем впливу. Усе, що не підтримується та впливає на мережу, дані користувача чи процес будування проекту (request, CRA, AWS SDK v2), має бути на першому місці; засоби для зменшення розміру пакетів, такі як Moment та Lodash, — на другому; суто стилістичну модернізацію можна відкласти.

    Основні висновки

    • Застарілі та не підтримувані пакети спочатку є проблемою безпеки, а вже потім — продуктивності, тому ранжуйте міграції за рівнем ризику.
    • Багато колишніх стандартних засобів (Moment, Lodash, jQuery, request) були інтегровані в мову, DOM чи середовище виконання, що робить заміну меншою за саму залежність.
  • Міграції інструментарію, такі як від CRA до Vite, зазвичай стосуються конфігурації, а не коду додатку.
  • Регулярний аудит та використання сучасного інструментарію для нових проектів допомагають у майбутньому зменшити кількість таких потреб.