Delete `␍`eslint(prettier/prettier) 錯誤的解決方案


問題背景

Windows筆記本上新拉完代碼,在執行pre-commit時,出現如下錯誤:

Delete `␍`eslint(prettier/prettier)

eslint-error.png

下面是幾種個人嘗試過的解決方案:

解決方案

一、Crtl+S保存文件

Crtl+S保存當前報錯文件,eslint錯誤消失,但是Git暫存區多了個文件改動記錄,對比Working tree沒發現任何不同。

diff.png

缺點:你不可能一一保存所有文件,麻煩,還要commit,多余。

二、yarn run lint --fix

比上面省事,eslint錯誤消失,但暫存區多了n個文件改動記錄,對比Working tree也沒發現任何不同。

缺點:需要commit所有文件,多余。

參考資料:"error Delete ⏎ prettier/prettier" in .vue files``

三、配置.prettierrc文件

在項目根目錄下的.prettierrc文件中寫入即可。其實就是不讓prettier檢測文件每行結束的格式.

"endOfLine": "auto"

缺點:不能兼容跨平台開發,從前端工程化上講沒有做到盡善盡美。

參考資料:Why do I keep getting Delete ‘cr’ [prettier/prettier]?

四、通過IDE一鍵切換

image

這是評論區掘金同道提供的方法,一般IDE下方狀態欄會提供“切換行尾序列”的工具,如上圖,一鍵切換到正確的行尾序列即可。

缺點:只能修復當前文件,不能解決整個項目報錯的問題。

五、最佳方案

問題根源:

罪魁禍首是git的一個配置屬性:core.autocrlf

由於歷史原因,windows下和linux下的文本文件的換行符不一致。

  • Windows在換行的時候,同時使用了回車符CR(carriage-return character)和換行符LF(linefeed character)
  • MacLinux系統,僅僅使用了換行符LF
  • 老版本的Mac系統使用的是回車符CR
Windows Linux/Mac Old Mac(pre-OSX)
CRLF LF CR
'\n\r' '\n' '\r'

因此,文本文件在不同系統下創建和使用時就會出現不兼容的問題。

我的項目倉庫中默認是Linux環境下提交的代碼,文件默認是以LF結尾的(工程化需要,統一標准)。

當我用windows電腦git clone代碼的時候,若我的autocrlf(在windows下安裝git,該選項默認為true)為true,那么文件每行會被自動轉成以CRLF結尾,若對文件不做任何修改,pre-commit執行eslint的時候就會提示你刪除CR

現在可以理解ctrl+syarn run lint --fix方案為何可以修復eslint錯誤了吧,因為Git自動將CRLF轉換成了LF

最佳實踐:

現在VScodeNotepad++編輯器都能夠自動識別文件的換行符是LF還是CRLF

如果你用的是windows,文件編碼是UTF-8且包含中文,最好全局將autocrlf設置為false

git config --global core.autocrlf false

注意:git全局配置之后,你需要重新拉取代碼。

總結

查找了不少資料,stackoverflowgithub上對這個問題有相應的討論和解決辦法,但都不能觸及靈魂。作下此文,以便日后翻閱,若對遇坑的朋友有所幫助,筆者樂此不疲!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM