Skip to content

Альфа плагина импортов для Oxlint

Мы рады объявить об альфа-релизе oxlint --import-plugin — порте eslint-plugin-import.

Цель этого порта — устранить известные проблемы eslint-plugin-import:

  • Производительность — время выполнения более минуты при включении некоторых правил
  • Размер зависимостей — 188 зависимостей суммарно ~30 МБ
  • Обратная совместимость — необходимость поддерживать Node.js v4.0.0
  • Совместимость зависимостей — необходимость замены на eslint-plugin-import-x
  • Обновление до ESLint v9

Что входит в релиз?

Этот альфа-релиз рассчитан на проекты в формате ESM (ECMAScript Modules).

Если нужны алиасы путей (например @/foo) через tsconfig.compilerOptions.paths, можно использовать опцию --tsconfig:

npx oxlint@latest --tsconfig ./tsconfig.json --import-plugin

Правила, включаемые по умолчанию через npx oxlint@latest --import-plugin:

Правила, которые можно включать выборочно через npx oxlint@latest --import-plugin -D rule-name:

Также есть улучшения этих правил; например, диагностики для правила no-cycle стали понятнее:

 ⚠ eslint-plugin-import(no-cycle): Dependency cycle detected
   ╭─[apps/web/playwright/lib/fixtures.ts:13:42]
12 │ import { createPaymentsFixture } from "../fixtures/payments";
13 │ import { createBookingPageFixture } from "../fixtures/regularBookings";
   ·                                          ─────────────────────────────
14 │ import { createRoutingFormsFixture } from "../fixtures/routingForms";
   ╰────
 help: These paths form a cycle:
       -> ../fixtures/regularBookings - apps/web/playwright/fixtures/regularBookings.ts
       -> ./users - apps/web/playwright/fixtures/users.ts
       -> ../lib/testUtils - apps/web/playwright/lib/testUtils.ts
       -> ./fixtures - apps/web/playwright/lib/fixtures.ts

Список возможностей небольшой, но из‑за сложности текущего состояния экосистемы реализация этих правил и проверка их корректности требуют немало усилий.

За последние полгода мы работали в свободное время и выполнили все предпосылки для работы --import-plugin:

  • resolver для разрешения модулей
  • небольшой "runtime", чтобы максимально параллельно обрабатывать зависимые файлы
  • структура данных ModuleRecord для хранения информации об импортах / экспортах и соответствующий builder

Как можно помочь?

Если вы сопровождаете проект (инженер по конфигурации) и не успеваете обновлять ESLint и все плагины, можете последовать примеру @brooooooklyn и заменить ESLint на oxlint во всех своих проектах.

Если вы энтузиаст опенсорса и готовы помочь — загляните к нам в Discord, ознакомьтесь с планом линтера и issue прогресса или помогите предложив новые правила, которые отложены.

Если вы инженерный менеджер или готовы мигрировать проект на oxlint (330 правил и дальше больше), чтобы снизить затраты на инфраструктуру, рассмотрите спонсорство, чтобы мы могли приоритизировать ваш проект.

Помните: oxlint сейчас развивает сообщество; при достаточных ресурсах мы сможем сделать --import-plugin общедоступным в ближайшие месяцы.


Чтобы начать пользоваться oxlint, см. руководство по установке или узнайте больше о проекте oxc.