将团队的项目克隆到本地,ESLint却报错如下:
这个错误是因为不同操作系统中的换行符风格不同。我使用Windows系统,所以代码换行的实质是CRLF,即回车(Carriage Return)+换行(Line Feed);而团队的项目原本处于Linux系统,换行的方式仅有 LF,即换行,因此在克隆到本地后,按照本地设置的换行方式,会多出一个回车,所以ESLint报错要删掉多余的CR。
解决方法是在.prettierrc中加入:
{
"endOfLine": "auto"
}
这项配置的作用是让Prettier根据当前操作系统对换行符进行调整,不强制使用回车或换行,因此即使团队跨平台开发,也不用每次都手动更改换行方式。
需要提到其他的一些不推荐的方式,如:
{
"endOfLine": "crlf"
}
这个做法是强制把换行方式与Windows对齐,如果这样做,虽然在本地ESLint不会继续报错,但如果团队使用CI Pipeline对Pull Request做代码检查,而CI服务器的操作系统是Linux,这样当代码进入流水线后就无法通过CI服务器上的ESLint检查。
值得注意的是,这个错误并不是ESLint负责报出的,ESLint只是报出了由Prettier负责的错误。在这两种工具中,ESLint主要检查代码质量问题,如因存在未使用的变量不规范而可能导致的问题,并不主要负责换行符、缩进等格式问题,格式问题应该交由Prettier负责。所以当同时使用两种工具时,不应该同时保留两者的代码格式设置,以防两者冲突。最佳实践是只保留Prettier的格式设置,ESLint则用于代码质量检查。