不同平台的回车处理 warning Delete `␍` prettier prettier
windows和linux平台,他们之间的换行符是不一样的,mac之前也不一样,后来和linux保持统一。
- windows是
CRLF
,也就是\r\n
; - linux是
LF
,也就是\n
;
两个平台之间换行符不一样,在有代码规范要求的情况下,很容易就会触发报错,如eslint的报错:warning Delete ␍ prettier/prettier
解决办法
假设我们代码规范要求换行是LF
;那我们需要进行以下配置:
- git提交时自动格式化换行符
这个做法是防止有人本地编辑的时候没有改为LF的换行方式然后上传,导致别人拉库下来会运行报错。
在项目根目录创建:.gitattributes
文件
文件内写入:
# LF为小写的lf,CRLF为小写的crlf
* text eol=lf
这个就表示上传时会自动格式化换行符
当然也可以指定某个格式的文件是这个
.js text eol=lf
如果没有自动转,你需要开启一下git的这个功能
git bash 输入:
git config --global core.autocrlf input
这句话的意思是提交时转为LF,拉下来时不自动转为CRLF
当然还有很多设置,具体看这个链接:《git 换行符LF与CRLF转换问题 IDE的默认换行符设置为LF》
当然,仅仅配置这个是没用的,如果他开启了代码检测,那么你修改的时候,换行符还是CRLF,改动文件后还是会报错,所以我们还需要调整一下编辑器。
- 调整编辑器的默认换行符
以vscode为例,直接在编辑器最底下点击即可切换
切换好后再修改,就行了,这样上传代码和即时编辑都是根据代码规范来得。
当然,如果你的代码规范是CRLF,你也可以根据上面自己调整一下就行了。
- 补充.gitattributes
虽然我们设置了* text eol=lf
;但是这会产生一个问题,他会把图片资源或者其他二进制资源的回车也给格式化了,这就导致资源文件的破坏,当然它的转换只会转换设置之后的文件,旧的之前的文件并不会被自动转换。
为了不影响文件,我们还需要添加以下内容:
# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.eot -text diff
*.exe -text diff
*.gif -text diff
*.gz -text diff
*.ico -text diff
*.jpeg -text diff
*.jpg -text diff
*.otf -text diff
*.phar -text diff
*.png -text diff
*.svgz -text diff
*.ttf -text diff
*.woff -text diff
*.woff2 -text diff
-text diff
再git中明确表示这个文件不被行尾跟踪和转换。
当然还有人使用这种写法:
*.png binary
binary表示这是二进制文件不应修改。
更多内容可以参考国外stackoverflow网站的: Force LF eol in git repo and working copy
提交时提示非代码文件换行错误
个人猜测原因是因为我们git虽然设置了core.autocrlf input自动在提交时转换尾换行符,但是资源文件,他也是一种代码形式,它的换行可能不符合要求,于是报出警告。
解决方式:
git config --global core.safecrlf warn #发现CRLF是警告并继续
这样设置就行了
另一种做法
如果不想配置.gitattributes,那么就让vscode的换行符改为指定的格式,然后关闭git的自动转换
git config --global core.autocrlf false
某一个文件换行符不对的格式化方法
git的换行符转换的配置只适合新文件,旧文件不合适,如果打开了旧文件,你会发现还是CRLF
格式,此时在vue cli启动的情况下触发保存,那么就会提示warning Delete ␍ prettier prettier
的报错。
解决办法也很简单,你再vscode的右下角可以发现,尾换行变成了CRLF
我们把它给为LF
;就会发现文件被修改了,其实就是被格式化了尾换行符,这样我再保存一下文件,就不会再报这个错误了。
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
全部评论 1
开朗的网友
Google Chrome Windows 7