Главная / Статьи

Устаревание зависимостей JavaScript Legacy: 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 действительно не справляется, например для проверки глубокого равенства или реализации техник дебаунсинга. В нашей статье о встроенных возможностях JavaScript, заменяющих зависимости от внешних библиотек приведены конкретные примеры такой замены.

    Тестирование и сетевые операции

    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, обычно касается настройок, а не кода приложения.
  • Регулярный аудит и использование современных инструментов для новых проектов помогают в будущем сокращать этот список.