.editorconfig задаёт единые правила форматирования исходного кода на уровне файловой системы, независимо от используемого редактора, IDE или операционной системы. В Vite-проектах он не является обязательным элементом сборки, но играет важную роль в унификации стиля кода до того, как вступают в работу инструменты уровня ESLint или Prettier.
Основная задача заключается в устранении различий между редакторами: разные настройки табуляции, кодировок, символов конца строки и поведения при сохранении файлов. Это особенно важно в проектах на Vite, где часто используются смешанные технологии: JavaScript, TypeScript, Vue, React, CSS, JSON.
Файл .editorconfig располагается в корне проекта и имеет INI-подобный синтаксис. Он может содержать несколько секций, каждая из которых применяется к определённому набору файлов.
Базовая структура выглядит следующим образом:
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
Каждый блок начинается с шаблона файлов:
[*] — все файлы проекта[*.js] — только JavaScript[*.vue] — Vue компоненты[*.css] — стили[*.md] — Markdown документацияПравила применяются по приоритету: более специфичные секции перекрывают общие.
Определяет кодировку файлов.
charset = utf-8
UTF-8 является стандартом для современных Vite-проектов, особенно при использовании международных библиотек и фреймворков.
Контролируют стиль отступов:
indent_style = space
indent_size = 2
В большинстве JavaScript-экосистем, включая Vue и React проекты на Vite, используется 2 пробела.
Для некоторых файлов допускается переопределение:
[*.md]
indent_size = 4
Определяет символ конца строки:
end_of_line = lf
LF используется как стандарт в кроссплатформенных проектах. CRLF может приводить к конфликтам в git и CI.
Добавляет пустую строку в конце файла:
insert_final_newline = true
Это снижает количество диффов в системах контроля версий и соответствует POSIX-стилю.
Удаляет пробелы в конце строк:
trim_trailing_whitespace = true
Особенно важно для Markdown и JavaScript файлов, где случайные пробелы создают шум в diff.
Типичный файл для проекта на Vite с использованием JavaScript или TypeScript:
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
insert_final_newline = false
[*.{json,yml,yaml}]
indent_size = 2
[*.css]
indent_size = 2
[*.html]
indent_size = 2
Такая конфигурация обеспечивает единообразие между слоями приложения: frontend-код, конфигурационные файлы, документация.
Vite сам по себе не обрабатывает .editorconfig, но экосистема вокруг него активно использует его как базовый слой форматирования.
.editorconfig работает до этапа:
Таким образом, он задаёт фундаментальные правила, которые не должны зависеть от плагинов или конфигураций проекта.
Плагины Vite (например, для Vue, React, PostCSS) не читают .editorconfig напрямую, но корректная настройка уменьшает количество конфликтов при трансформации файлов, особенно в случаях:
.editorconfig часто используется совместно с Prettier и ESLint, но между ними существует различие уровней ответственности.
Частая проблема — дублирование настроек:
// prettier.config.js
{
"tabWidth": 2,
"useTabs": false
}
# .editorconfig
indent_style = space
indent_size = 2
При несовпадении настроек может возникать эффект “переформатирования при сохранении”. Обычно Prettier считается приоритетным, а .editorconfig служит согласующим слоем для редакторов.
.editorconfig поддерживается большинством современных редакторов, но часто требует плагинов.
В VS Code поддержка встроена частично, но рекомендуется расширение EditorConfig.
Поведение:
Поддержка встроена на уровне IDE:
Поддержка через плагины:
Без плагина файл игнорируется.
В монорепозиториях Vite-проекты часто находятся внутри подкаталогов. .editorconfig может быть размещён как в корне, так и в каждом пакете.
root = true
Этот параметр останавливает поиск конфигураций выше по дереву директорий.
Один .editorconfig в корне:
repo/
.editorconfig
packages/
apps/
Подходит для унифицированных проектов.
# packages/app/.editorconfig
root = true
Используется, когда пакет имеет собственные стандарты.
Без этого параметра редакторы могут искать конфигурации выше по дереву, что приводит к неожиданным правилам форматирования.
Если Prettier и .editorconfig задают разные отступы, итоговый результат зависит от порядка применения плагинов.
Отсутствие секций для JSON, YAML или Markdown приводит к визуальной несогласованности проекта.
Windows-разработчики часто используют CRLF по умолчанию, что приводит к шумным diff в Git и проблемам CI на Linux-агентах.
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
indent_size = 2
[*.tsx]
indent_size = 2
[*.vue]
indent_size = 2
[*.css]
indent_size = 2
[*.scss]
indent_size = 2
[*.json]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
Такая структура охватывает типичный стек Vite-проекта с TypeScript, Vue или React, стилями и документацией, обеспечивая единообразие на уровне файлов до этапа сборки и линтинга.