Все новости
Программирование7 июня 2026 г. · 7 мин чтения

Пора прощаться с ESLint? Как Oxlint меняет правила игры в JavaScript-разработке

Новый линтер на Rust обещает ускорить проверку кода в десятки раз и избавить от конфигурационного ада. Разбираем реальные бенчмарки, плюсы, минусы и сценарии миграции.

Пора прощаться с ESLint? Как Oxlint меняет правила игры в JavaScript-разработке

Линтер Oxlint, написанный на Rust, в 50–100 раз быстрее привычного ESLint и работает сразу после установки. Разбираем, когда миграция оправдана, а когда лучше подождать.

ESLint — это де-факто стандарт статического анализа JavaScript-кода. Инструмент работает поверх Node.js и V8, поддерживает сотни плагинов и позволяет настраивать правила под любой проект. По данным опроса State of JavaScript 2025, ESLint остаётся самым популярным вспомогательным инструментом среди фронтенд-разработчиков.

Новый проект развивается в рамках экосистемы Oxc, поддерживаемой командой VoidZero.

Ключевые выводы

Oxlint на Rust обгоняет ESLint в 50–100 раз на крупных репозиториях вроде Vue Core и React Router.

Из коробки включено 107 правил, тогда как ESLint требует ручной настройки даже для базовых сценариев.

Поддержка ESLint-плагинов экспериментальная, но список доступных правил постоянно растёт.

Миграция возможна постепенно: оба линтера можно запускать параллельно.

Если ваш проект завязан на редкие плагины или пользовательские правила — спешить не стоит.

Почему ESLint начинает раздражать

Несмотря на зрелость экосистемы, у ESLint накопился приличный багаж архитектурных ограничений:

  1. Производительность. Код ESLint выполняется в однопоточном режиме поверх JavaScript-движка. В небольших проектах это незаметно, но в монорепозиториях с сотнями тысяч строк проверка легко растягивается на две минуты и больше.
  2. Конфигурационный ад. Новичкам приходится разбираться в иерархии конфигов, flat config, shared presets и compatibility layers. Документация исчерпывающая, но порог входа остаётся высоким.
  3. Минимум из коробки. Базовая установка ESLint практически ничего не проверяет. Для получения хоть какой-то пользы нужно ставить плагины, изучать правила и собирать конфигурацию с нуля — в отличие от Prettier или Biome, которые работают сразу после установки.

Чем Oxlint лучше привычного линтера

Скорость, которую можно измерить

Главное преимущество Oxlint — скорость. В тестах на репозитории Vue Core с type-aware правилами Oxlint справляется за 1,3 секунды, тогда как ESLint с typescript-eslint тратит 133,8 секунды. Это почти в 100 раз быстрее. На репозитории React Router разрыв меньше, но всё равно впечатляет: 435 мс против 29,5 с — ускорение в 68 раз.

Type-aware линтинг без тормозов

ESLint для type-aware правил использует typescript-eslint, который перед проверкой запускает полный анализ через tsc. Это наследует все накладные расходы компилятора TypeScript. Oxlint делает это иначе: type-aware функциональность реализована через oxlint-tsgolint на Go, который в связке с TypeScript 7 и компилятором tsgo работает в 20–40 раз быстрее привычного пайплайна.

Настройка за минуту, а не за час

После установки Oxlint сразу активирует 107 правил. Конфигурация проще, документация понятнее, а сообщения об ошибках структурированы так, что и человек, и LLM-ассистент разберутся с первого взгляда.

Постепенная миграция без боли

Oxlint не требует выбросить ESLint в один день. Инструменты можно запускать параллельно: Oxlint берёт быструю проверку на pre-commit, а ESLint остаётся в CI до полного перехода. Экспериментальная поддержка JavaScript-плагинов ESLint уже работает, хотя и не покрывает всю экосистему.

Реальные цифры: бенчмарки на популярных репозиториях

Автор оригинального материала воспроизвёл тесты на ноутбуке HP EliteBook 1040 G7 (16 ГБ ОЗУ, 4 физических ядра, 8 потоков). Результаты для Vue Core с type-aware правилами:

============================================Vue Core Benchmark - Type-Aware Rules============================================
Benchmark 1: oxlintTime (mean ± σ): 1.343 s ± 0.154 sRange (min … max): 1.163 s … 1.538 s
Benchmark 2: eslintTime (mean ± σ): 133.864 s ± 23.217 sRange (min … max): 97.851 s … 162.867 s
Summary: oxlint ran 99.65 times faster than eslint

Результаты для React Router (без type-aware правил):

Benchmark 1: oxlintTime (mean ± σ): 434.9 ms ± 108.6 msRange (min … max): 306.7 ms … 610.0 ms
Benchmark 2: eslintTime (mean ± σ): 29.459 s ± 2.838 sRange (min … max): 26.508 s … 34.602 s
Summary: oxlint ran 67.74 times faster than eslint

Цифры подтверждают заявленные разработчиками 50–100-кратное ускорение. Для разработчика это разница между «пойду за кофе, пока линтер работает» и «результат на экране мгновенно».

Когда ESLint всё ещё нужен

Несмотря на впечатляющие цифры, спешить со сносом ESLint не всегда разумно. Вот сценарии, где старый инструмент остаётся предпочтительнее:

  1. Редкие плагины и пользовательские правила. Если ваш проект завязан на специфические ESLint-плагины, которых ещё нет в Oxlint, миграция потребует дополнительной работы.
  2. Малые проекты. В репозиториях до 10–20 тысяч строк разница между 1 секундой и 30 секундами линтинга не критична.
  3. Сложные рабочие процессы. Глубокая интеграция ESLint в CI/CD, пользовательские форматтеры и специфические пайплайны могут быть дорого переносить.
  4. Сообщество и экосистема. ESLint остаётся доминирующим линтером. Вокруг него больше обучающих материалов, примеров конфигураций и поддержки со стороны LLM-ассистентов.

Как мигрировать с ESLint на Oxlint

Команда Oxlint подготовила утилиту @oxlint/migrate, которая автоматически преобразует конфигурацию ESLint в формат Oxlint. Выбор пути зависит от текущего состояния проекта:

  1. Для ESLint v9/v10+ с flat config: запустите npx @oxlint/migrate — утилита преобразует поддерживаемые правила и сообщит о несовместимых.
  2. Для ESLint v8 и старше (в v10 поддержка legacy-конфигов полностью удалена): сначала мигрируйте на flat config через npx @eslint/migrate-config, затем примените @oxlint/migrate.
  3. Если нужны type-aware правила: добавьте флаг --type-aware к команде npx @oxlint/migrate и установите oxlint-tsgolint.
  4. Для экспериментальной поддержки JS-плагинов: используйте флаг --js-plugins в команде npx @oxlint/migrate.
  5. Не уверены в безопасности? Запустите оба линтера параллельно на несколько недель и сравните результаты.
Совет:
Начните миграцию с новых модулей или микрофронтендов, а не с устаревшего кода, где линтер и так давно отключён.

Часто задаваемые вопросы

Что такое Oxlint и чем он отличается от ESLint?

Oxlint — это линтер для JavaScript и TypeScript, написанный на Rust. В отличие от ESLint, который работает поверх Node.js, Oxlint компилируется в нативный код и использует параллельную обработку. Это даёт ускорение в 50–100 раз при схожей функциональности.

Поддерживает ли Oxlint ESLint-плагины?

Частично. Экспериментальная поддержка JavaScript-плагинов ESLint реализована через флаг --js-plugins. Oxlint уже покрывает более 650 правил из ядра ESLint, TypeScript, React, Jest и accessibility, но редкие плагины могут отсутствовать.

Как быстро проходит миграция?

Для проектов на ESLint v9+ с flat config миграция занимает минуты: утилита @oxlint/migrate автоматически преобразует конфигурацию. Для устаревших конфигов v8 потребуется промежуточный шаг через @eslint/migrate-config. Сложность растёт только при наличии кастомных правил и редких плагинов.

Стоит ли мигрировать прямо сейчас?

Если ваш проект крупный и linting заметно тормозит разработку — скорее да, чем нет. Если проект небольшой или во многом завязан на специфические ESLint-плагины — можно подождать полной совместимости. Oxlint и ESLint прекрасно уживаются параллельно, так что спешить необязательно.

Выводы

ESLint не умер, но его эпоха безраздельного господства подходит к концу. Oxlint демонстрирует, что статический анализ JavaScript может быть быстрым, простым в настройке и дружелюбным к разработчику. Для большинства современных проектов переход уже оправдан экономикой времени: сэкономленные минуты на каждом коммите за год превращаются в десятки часов продуктивной работы.

Для большинства современных проектов Oxlint — это уже не перспективная альтернатива, а вполне зрелый инструмент по умолчанию.
Boshenсоздатель Oxc, VP Engineering в VoidZero

Источник: LogRocket — Retire ESLint: How (and why) to migrate to Oxlint

Репозиторий проекта: github.com/oxc-project/oxc. Документация: oxc.rs.

Попробуйте запустить npx @oxlint/migrate на своём проекте и сравните цифры. Возможно, вы больше никогда не захотите ждать, пока закончится npm run lint.


Источник: ТПрогер

Читайте также