Prettier で `Delete ␍` の改行コードエラーが消せない
Windows で checkout した CRLF ファイルに対して Prettier 既定の LF と差分が出るのが原因。
endOfLine: auto と .gitattributes の併用で恒久的に解決する。
#prettier#eol#crlf#line-ending#windows
公開:
要約
「Delete ␍ がファイル全行に出る」「Prettier を実行すると全行が変更扱いになる」現象は、CRLF と LF の改行コード差。
Prettier の endOfLine を "auto" にし、.gitattributes で LF に統一すれば再発しなくなる。
よくある原因
- Windows で
git config --global core.autocrlf trueになっており、checkout 時に CRLF へ変換される - Prettier の既定
endOfLineがlfのため、CRLF ファイルを「LF に直せ」と差分指示してくる .gitattributesがリポジトリに無いので OS ごとに改行コードが揺れる- VS Code の「Files: Eol」設定が
\r\nになっている
解決策
1. Prettier の設定を "auto" に
{
"endOfLine": "auto"
}"auto" はファイル先頭の改行コードを尊重するので、CRLF も LF も「現状維持」になる。
リポジトリ全体を LF で揃えたい場合は "lf" を指定し、次の .gitattributes と組み合わせる。
各値の意味は Prettier 公式ドキュメント を参照。
2. .gitattributes で改行コードを正規化
リポジトリルートに以下を置く:
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlftext=auto で Git が「テキストファイルらしいもの」を自動判定し、eol=lf で working tree に LF で展開する。.bat / .cmd だけは Windows の制約で CRLF を強制する。
3. 既存ファイルを再正規化
.gitattributes 追加直後は、既存コミット済みファイルの改行コードはそのまま。
以下で一括正規化する:
git add --renormalize .
git status # 改行コードだけが変わったファイルが大量に表示される
git commit -m "Normalize line endings to LF"4. エディタ側も合わせる
VS Code なら settings.json に:
{
"files.eol": "\n"
}ESLint と Prettier を併用している場合、ESLint 側の linebreak-style ルールも同じ向きに揃えないと、片方が CRLF を要求して堂々巡りになる。