Альфа плагина импортов для 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-named-as-default
- no-named-as-default-member
- no-self-import
- no-duplicates
- no-amd
- no-default-export
- no-cycle
Также есть улучшения этих правил; например, диагностики для правила 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.
