← Назад к вопросам

Для чего нужны форматтеры?

1.8 Middle🔥 151 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Для чего нужны форматтеры

Форматтеры (code formatters) — это инструменты автоматизации, которые приводят код к единому стилю. Они переформатируют исходный код в соответствии с заранее определёнными правилами, не меняя функциональность.

Основные форматтеры в экосистеме JS/TS

1. Prettier — самый популярный

Prettier — это опинионированный форматтер кода (по умолчанию имеет строгие правила):

// ДО форматирования (неаккуратный код)
const user={id:1,name:"Alice",email:"alice@example.com",role:"admin",isActive:true};
function calculateSum(a,b,c){return a+b+c;}

// ПОСЛЕ Prettier
const user = {
  id: 1,
  name: "Alice",
  email: "alice@example.com",
  role: "admin",
  isActive: true
};
function calculateSum(a, b, c) {
  return a + b + c;
}

Конфигурация (.prettierrc.json):

{
  "semi": true,
  "singleQuote": false,
  "trailingComma": "es5",
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false
}

2. ESLint — линтер (проверка стиля + логические ошибки)

ESLint проверяет и сообщает об ошибках:

// ESLint предупредит о проблемах
function test() {
  var x = 1;  // ESLint: используй const/let вместо var
  console.log(x);  // ESLint: удали console перед продакшном
  if (true == x) { }  // ESLint: используй === вместо ==
}

unused_variable = 5;  // ESLint: переменная не используется

3. EditorConfig — стандартизация на уровне редактора

# .editorconfig
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.{js,ts,jsx,tsx}]
indent_style = space
indent_size = 2

[*.md]
indent_size = 4
max_line_length = off
trim_trailing_whitespace = false

Зачем нужны форматтеры

1. Единство стиля кода

В команде разработчиков каждый пишет по-разному:

// Разработчик 1 (табы, длинные строки)
function getUserData(userId){
    return fetch(`https://api.example.com/users/${userId}`).then(r=>r.json()).then(d=>({...d, formatted: new Date().toISOString()}));
}

// Разработчик 2 (пробелы, короткие строки)
function getUserData( userId ) {
  return fetch(
    `https://api.example.com/users/${userId}`
  )
    .then( response => response.json() )
    .then( data => ({
      ...data,
      formatted: new Date().toISOString()
    }) );
}

// Форматтер приводит к единому стилю
function getUserData(userId) {
  return fetch(`https://api.example.com/users/${userId}`)
    .then((r) => r.json())
    .then((d) => ({
      ...d,
      formatted: new Date().toISOString(),
    }));
}

2. Сокращение code review времени

Без форматтера код review фокусируется на стиле:

Rereview comment: "Fix indentation on line 42"
Review comment: "Use double quotes instead of single"
Review comment: "Add space after if statement"

С форматтером все style-замечания исчезают, и review фокусируется на логике:

Review comment: "This function violates SRP, split it"
Review comment: "Edge case not handled when userId is null"
Review comment: "Consider using Promise.all instead of then chain"

3. Предотвращение git-конфликтов

Без форматтера разработчики переформатируют файлы вручную:

// Разработчик A
- const data = { a: 1,b: 2 };
+ const data = { a: 1, b: 2 };

// Разработчик B
- const data = { a: 1,b: 2 };
+ const data = {
+   a: 1,
+   b: 2
+ };

// КОНФЛИКТ! В git видны огромные changes из-за стиля

С форматтером:

prettier --write .
# Все файлы переформатируются одинаково
# Git видит только реальные изменения

4. Автоматизация и экономия времени

# Вместо ручного форматирования
prettier --write src/

# Или в pre-commit hook (husky + lint-staged)
{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,ts,jsx,tsx}": ["eslint --fix", "prettier --write"]
  }
}

5. Новички быстро привыкают к стилю

Новый разработчик не нужно учить все правила стиля — форматтер всё сделает:

// Новичок пишет как ему удобно
const user={id:1,name:"Bob",email:"bob@example.com"};
if(user.id>0)console.log("Valid");

// После npm run format
const user = {
  id: 1,
  name: "Bob",
  email: "bob@example.com",
};
if (user.id > 0) {
  console.log("Valid");
}

// Идеально! Стиль соответствует команде

Лучшие практики

1. Prettier + ESLint вместе

Отключи конфликтующие правила ESLint и оставь форматирование Prettier:

{
  "extends": [
    "eslint:recommended",
    "prettier"
  ],
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error"
  }
}

2. Настрой pre-commit hook

npm install --save-dev husky lint-staged
npx husky install
{
  "lint-staged": {
    "*.{js,ts,jsx,tsx}": ["eslint --fix", "prettier --write"],
    "*.json": ["prettier --write"],
    "*.md": ["prettier --write"]
  }
}

3. Настрой IDE

В VS Code (.vscode/settings.json):

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

Типичные ошибки

Ошибка 1: Борьба с форматтером

# Ты переформатировал руками
# Потом Prettier переформатировал по-своему
# Потом ты опять переформатировал
# -> Бесконечный цикл

# Решение: доверься форматтеру и настрой его один раз

Ошибка 2: Слишком строгие правила

{
  "semi": true,
  "printWidth": 60,  // Слишком коротко, код разбит на много строк
  "tabWidth": 4,     // Слишком много отступа
}

// Лучше использовать дефолты Prettier (80 символов, 2 пробела)

Итог

Форматтеры нужны для:

  • Единства стиля кода в команде
  • Сокращения time-to-code-review
  • Предотвращения style-конфликтов в git
  • Автоматизации работы
  • Быстрой onboarding новых разработчиков

Best Practice:

  • Используй Prettier для форматирования
  • Используй ESLint для проверки логики
  • Настрой pre-commit hooks
  • Дай форматтеру автоматически форматировать на save

Форматтеры — это не развлечение, это необходимость в профессиональной разработке.