刚从 git 上拉取的代码,运行后直接报一大堆警告,全部在文件每行的末尾报红,提示 Delete ␍eslint(prettier/prettier)。项目中都已经配置好了 prettier 和 eslint 统一的检测工具,怎么还会出现这种问题? 下面介绍下解决方案以及出现这种问题的原因。
方案一: 根据提示进行修改(不推荐)
通过提示进行修改文件,或者通过命令全局修改,
npm run lint --fix
这样会将所有的文件全都修改,那么提交代码后,别的同事在更新代码,又会出现问题,所有这种方法是不可行的。
方案二: 在.prettierrc文件中添加配置
在.prettierrc文件中直接添加如下代码:
{
// ...
"endOfLine": "auto"
}
"endOfLine": "auto":不让prettier检测文件每行结束的格式
方案三: 修改 git 的配置 (最佳解决方案)
出现这个问题的原因:windows下和linux下的文本文件的换行符不一致。
-
windows:CRLF(表示句尾使用回车换行两个字符,即windows下的"\r\n"换行) -
Linux:LF(表示句尾,只使用换行,即末尾是"\n") -
mac:CR(表示只使用回车,即末尾是"\r")
windows 电脑 git clone 代码的时候,autocrlf 选项默认为 true,克隆下来的文件每行会被自动转成以CRLF 结尾,若对文件不做任何修改,commit 执行 eslint 的时候就会提示你删除 CR。
因此最根本的办法就是对git的autocrlf配置属性进行修改,这样我们就不需要改动代码了:
git config --global core.autocrlf false
执行此命令后,若无效,可重启vscode,或者重新拉取代码,就完美解决了
git core.autocrlf 配置说明
core.autocrlf是git中负责处理line ending的变量,可以设置3个值:true,false,input。
在Windows平台上,core.autocrlf 默认是true,可以通过命令查看。
git config --list
- 设置
true时,在拉取代码换行(LF)会被转换成回车和换行(CRLF)。 - 设置
false时 提交和拉取都将不做转换操作,保留原有版本。 - 设置
input时,提交会把回车和换行转(CRLF)换成换行(LF),拉取时不转换。