刚从 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
),拉取时不转换。