Skip to content
快速预览

EditorConfig专注于统一编辑器编码风格配置

✍️ w 🕒 2023-08-17 00:37:37(9 months ago) 🔗 C.前端工程化

代码编辑器的配置信息独立维护不对外共享。使用不同编辑器打开同一份文件,如果编辑器配置不统一,显示效果和输入内容很有可能不一致,单个编辑器独立操作只是存在隐患,在多编辑器或跨编辑器的情况下,隐患就容易升级为问题,最终导致代码处于混杂状态

因此 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。如「设定缩进使用 Tab 还是 Space」,「一个 Tab 占用多少列」,「是否在文件末尾显示空行」等等

比如,一个 Tab 占用两列的 Sublime,一个 Tab 占用四列的 VSCode ,打开同一份文件显示效果不同

单个编辑器独立操作只是存在隐患,在多编辑器或跨编辑器的情况下,隐患就容易升级为问题,最终导致代码处于混杂状态。

支持的市面编辑器

EditorConfig 配置基本覆盖了主流上大部分浏览器,这些浏览器分为两种 内置自带解析EditorConfig 和需要安装插件提过EditorConfig 解析的两大类

  • 不需要安装插件的

  • 需要安装插件的

以 vscode 为例 需要安装下图的插件才能使用

简单配置说明

配置 .editorconfig 文件

yaml
# http://editorconfig.org

root = true

[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8,不同编译器可能存在默认不是utf-8解码
indent_style = space # 缩进风格(tab | space)
# tab_width = 2       设置 tab 所占列数。默认是indent_size
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行尾的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行

[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

Prettier 还需要 EditorConfig

EditorConfig 解决了编辑器配置层面的编码风格一致性问题。作用于预览和输入阶段,Prettier 在保存和提交阶段重新组织代码,Prettier 会成为代码形态的最终决定者

EditorConfig 覆盖所有类型的文件,可以采用 EditorConfig 管理相交属性,其他属性则由 Prettier 控制。

EditorConfig 使不同编辑器可以保持同样的配置。因此,我们得以无需在每次编写新代码时,再依靠 Prettier 来按照团队约定格式化一遍(译注:出现保存时格式化突然改变的情况)。当然这需要在你的 IDE 上安装了必要的 EditorConfig 插件或扩展。

并且关于代码风格的部分并未涉及,比如是否「需要在语句末尾添加分号」,「字符串使用单引号还是双引号包裹」,「多行对象的书写规范」等等。这些都是 Prettier 的工作范畴,而不是 EditorConfig 的。

以 VSCode 为例,但 EditorConfig 支持很多编辑器。

在项目中增加自定义的编辑器配置:

.editorconfig

yaml
[*]
end_of_line = lf
charset = utf-8
indent_style = space

如果安装了 the EditorConfig VSCode extension,编辑器将自动获知该如何格式化你的文件。你也能在编辑器右下角看到相应的信息

这意味着 Prettier 和 EditorConfig 共享了相同的配置选项,所以要注意是两者配置最好统一

yaml
# EditorConfig
end_of_line
indent_style
indent_size/tab_width
max_line_length
yaml
# Prettier
"endOfLine"
"useTabs"
"tabWidth"
"printWidth"

其实如果 配置了 Prettier 最后代码一定是按照 Prettier 为准,EditorConfig 所能提供的就是编写阶段不用在手敲代码时候 去注意使用的配置细节,但是如果你配置 Prettier ,它是在保存阶段 正是如此本质上他会覆盖 EditorConfig,你可以理解编写时候处理让你更好的书写代码的作用

参考

译 以和为贵!让 ESlint、Prettier 和 EditorConfig 互不冲突

Released under the MIT License.