Biome: линтер и форматтер для JavaScript в одном быстром бинарнике
Наследник Rome, написанный на Rust, заменяет ESLint и Prettier одним инструментом без конфигурации плагинов и работает в десятки раз быстрее.
Откуда взялся
Проект Rome обещал заменить весь фронтенд-инструментарий одной программой, но компания за ним закрылась в 2023 году. Сообщество форкнуло код под именем Biome и сузило амбиции: линтер, форматтер и организация импортов. Этого оказалось достаточно, чтобы к 2026 году Biome стал стандартным выбором для новых проектов.
Что внутри
Biome написан на Rust и распространяется одним исполняемым файлом. Он разбирает JavaScript, TypeScript, JSX, JSON, CSS, GraphQL, а с версии 2 ещё HTML, Vue и Svelte. Парсер устойчив к ошибкам: файл с синтаксической ошибкой всё равно форматируется и проверяется там, где это возможно.
Скорость заметна сразу. На проекте в несколько тысяч файлов ESLint с typescript-eslint работает минуту, Biome укладывается в секунду. Для pre-commit-хуков и редакторов разница ощутима.
Конфигурация
Один файл biome.json вместо .eslintrc, .prettierrc, .eslintignore и списка плагинов:
{
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
"formatter": { "indentStyle": "space" },
"linter": {
"rules": { "recommended": true }
}
}
Форматтер совместим с Prettier более чем на 97% по официальным тестам, и миграция обычно сводится к одному большому коммиту с переформатированием. Команда biome migrate eslint переносит существующие правила ESLint в конфиг Biome там, где есть соответствие.
Чем отличается от ESLint
Правила написаны на Rust и не расширяются плагинами на JavaScript. Это и плюс, и минус. Плюс: нет ада зависимостей и конфликта версий между плагинами, нет деградации скорости от каждого нового правила. Минус: если нужного правила нет, его придётся ждать или писать в GritQL, собственном языке запросов к синтаксическому дереву, который появился во второй версии.
Вторая версия добавила вывод типов без обращения к TypeScript, что позволило перенести часть правил typescript-eslint, которые раньше требовали полного анализа проекта.
Чего не хватает
Специфичных правил для фреймворков меньше, чем в экосистеме ESLint: React и Next.js покрыты хорошо, Angular и Vue ещё догоняют. Плагины на GritQL пока не умеют всего, что умеют плагины ESLint. Markdown и YAML не поддерживаются.
Кому подойдёт
Новым проектам на TypeScript, где нет накопленного багажа правил. Монорепозиториям, где скорость линтера влияет на время CI. Командам, которые устали обновлять десяток плагинов ESLint после каждого мажорного релиза.
Войти, чтобы оценить материал
Комментарии
Войти, чтобы оставить комментарий