Biome (Alternativa ao ESLint + Prettier)
Use o Biome como uma ferramenta única e rápida para linting, formatação e organização de imports - substituindo tanto o ESLint quanto o Prettier.
Busque em todas as páginas da documentação
Use o Biome como uma ferramenta única e rápida para linting, formatação e organização de imports - substituindo tanto o ESLint quanto o Prettier.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
Cartão de receita de referência rápida - pronto para copiar e colar.
# Instalar Biome
npm install --save-dev @biomejs/biome
# Inicializar configuração
npx biome init
# Formatar arquivos
npx biome format --write .
# Executar lint em arquivos
npx biome lint .
# Executar lint + format + organizar imports em um único comando
npx biome check --write .Quando usar isso: Quando você deseja uma única ferramenta que seja significativamente mais rápida que ESLint + Prettier combinados, com configuração mínima.
// biome.json
{
"$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
"organizeImports": {
"enabled": true
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 80,
"lineEnding": "lf"
},
"javascript": {
"formatter": {
"semicolons": "always",
"quoteStyle": "double",
"trailingCommas": "all",
"arrowParentheses": "always"
}
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"correctness": {
"useExhaustiveDependencies": "warn",
"noUnusedVariables": "error",
"noUnusedImports": "error"
},
"suspicious": {
"noExplicitAny": "warn"
},
"style": {
"useConst": "error",
"noNonNullAssertion": "warn"
},
"a11y": {
"useAltText": "error",
"useAnchorContent": "warn"
}
}
},
"files": {
"ignore": [
"node_modules/",
".next/",
"out/",
"coverage/",
"*.min.js"
]
}
}// scripts do package.json
{
"scripts": {
"lint": "biome lint .",
"format": "biome format --write .",
"check": "biome check --write .",
"check:ci": "biome check ."
}
}O que isso demonstra:
biome.json substitui tanto .eslintrc quanto .prettierrcbiome check executa lint + format + organização de imports em uma única passagemcorrectness, suspicious, style, a11y, complexity, performance, securityrecommended habilita padrões sensatos semelhantes a eslint:recommended + react/recommendedMigrando de ESLint + Prettier:
# Biome pode migrar sua configuração do ESLint
npx biome migrate eslint --write
# Migrar configuração do Prettier
npx biome migrate prettier --writeComparação de performance:
| Ferramenta | Tempo (1000 arquivos) | Notas |
|---|---|---|
| ESLint + Prettier | 5 a 15 segundos | Dois parses de AST separados |
| Biome | 100 a 500 milissegundos | Parse único baseado em Rust |
Integração com IDE:
// .vscode/settings.json
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
}// .vscode/extensions.json
{
"recommendations": ["biomejs.biome"]
}Substituições seletivas por diretório:
{
"overrides": [
{
"include": ["tests/**"],
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
}
]
}// Biome entende TypeScript nativamente - nenhum plugin de parser é necessário.
// Ele detecta:
// Imports não utilizados
import type { User } from "@/types"; // Removido se não utilizado
// Variáveis não utilizadas
const unused = "hello"; // Erro: noUnusedVariables
// Any explícito
const data: any = fetch("/api"); // Aviso: noExplicitAny
// Asserções non-null
const name = user!.name; // Aviso: noNonNullAssertionCoisas que vão te pegar. Cada armadilha inclui o que dá errado, por que acontece e a correção.
Sem ecossistema de plugins - Biome não suporta plugins de terceiros. Não há equivalente para eslint-plugin-tailwindcss ou eslint-plugin-testing-library. Correção: Se você precisa de ordenação de classes Tailwind, use prettier-plugin-tailwindcss junto com o Biome (Biome para linting, Prettier apenas para ordenação de classes Tailwind), ou aceite a limitação.
Sem regras específicas para Next.js - Biome não inclui regras do eslint-plugin-next (no-img-element, no-head-element, etc.). Correção: Execute next lint junto com o Biome para verificações específicas do Next.js, ou aceite a lacuna.
Nomes de regras diferentes - Os nomes das regras diferem do ESLint (por exemplo, noUnusedVariables vs no-unused-vars). Correção: Use npx biome migrate eslint para converter sua configuração automaticamente.
Diferenças de formatação em relação ao Prettier - Biome visa a compatibilidade com o Prettier, mas não é 100% idêntico. Alguns casos extremos na formatação JSX e TypeScript diferem. Correção: Execute npx biome format em sua base de código uma vez e revise as diferenças. A maioria das diferenças são menores.
Outras maneiras de resolver o mesmo problema - e quando cada uma é a melhor escolha.
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| ESLint + Prettier | Você precisa do ecossistema completo de plugins (Tailwind, testes, etc.) | A performance é uma preocupação principal |
oxlint + Prettier | Você quer linting rápido, mas mantém o Prettier para formatação | Você quer uma única ferramenta unificada |
dprint + ESLint | Você quer um formatador Rust rápido com ESLint para linting | Você quer reduzir a complexidade das ferramentas |
--write aplica todas as correções e alterações de formatação no local.--write, ele apenas reporta problemas (use este modo em CI).npx biome migrate eslint --write
npx biome migrate prettier --writeEsses comandos convertem suas configurações existentes em equivalentes de biome.json.
eslint-plugin-tailwindcss ou eslint-plugin-testing-library.prettier-plugin-tailwindcss junto com o Biome para essa tarefa específica.eslint-plugin-next (no-img-element, no-head-element, etc.).next lint junto com o Biome para verificações específicas do Next.js.noUnusedVariables em vez de no-unused-vars.correctness, suspicious, style, a11y, complexity.npx biome migrate eslint para converter os nomes das regras automaticamente.{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
}any explícito e asserções non-null.npx biome format em sua base de código e revise as diferenças antes de commitar.{
"overrides": [
{
"include": ["tests/**"],
"linter": {
"rules": {
"suspicious": { "noExplicitAny": "off" }
}
}
}
]
}correctness -- bugs e erros lógicos (deps exaustivas, variáveis não utilizadas)suspicious -- código que provavelmente está errado (any explícito, chaves duplicadas)style -- preferências de estilo de código (const, nomenclatura)a11y -- verificações de acessibilidade (texto alternativo, ARIA)complexity -- código excessivamente complexoperformance -- anti-padrões de performancesecurity -- vulnerabilidades de segurançaRevisado por Chris St. John·Última atualização: 10 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥