如何解决Windows下prettier --write替换LF为CRLF且endOfLine配置不生效问题
Windows环境下Prettier固定LF换行符配置方案
你配置的"endOfLine": "lf"参数不生效,基本都是Git自动换行转换、其他配置优先级覆盖两个原因导致的,按以下步骤操作即可解决:
1. 锁死Git换行规则,避免checkout阶段自动转CRLF
Windows版Git默认开启core.autocrlf=true,会在拉取代码时自动把仓库内的LF文件转为CRLF存到本地工作区,是这类问题最常见的诱因。
仓库级统一规则(推荐,对所有团队成员生效)
在项目根目录新建.gitattributes文件提交到代码库,该配置优先级高于所有用户本地Git设置,不会因为个人环境差异失效:
# 所有文本文件默认使用LF换行 * text=auto eol=lf # Windows批处理脚本保留CRLF,避免执行异常 *.bat text eol=crlf *.cmd text eol=crlf
提交后所有团队成员拉取最新代码,在项目根目录执行以下命令重置本地工作区文件,清除之前被错误转换的CRLF文件:
git rm --cached -r . git reset --hard HEAD
本地Git配置兜底
Windows用户单独执行以下命令,关闭当前仓库的自动换行转换:
git config core.autocrlf false git config core.eol lf
2. 排查Prettier配置优先级冲突
- 检查项目根目录是否存在
.editorconfig文件,如果文件内配置了end_of_line = crlf,Prettier默认会优先读取该配置覆盖自身规则。可以直接把该行修改为end_of_line = lf,或者在.prettierrc中添加"useEditorConfig": false关闭Prettier对EditorConfig的读取。 - 检查是否存在全局Prettier配置冲突:包括Windows用户目录下的全局
.prettierrc、VSCode Prettier插件的全局设置,如果全局配置指定了endOfLine: "crlf"或endOfLine: "auto",会干扰项目级配置生效。可以直接在项目的.vscode/settings.json中写入以下配置,强制工作区内的Prettier插件使用项目规则:{ "prettier.endOfLine": "lf", "prettier.useEditorConfig": false } - 确认本地Prettier版本≥2.0.0,2.0以下版本对
endOfLine参数的处理存在已知bug,直接升级到稳定版即可。
3. 验证效果
配置完成后执行prettier --write格式化任意文件,可通过编辑器右下角的换行符标识,或在Git Bash/WSL中执行file 目标文件路径查看文件换行格式,返回with LF line terminators即为配置生效。
注意:不要使用Windows老版本自带记事本编辑项目文件,该类记事本保存时会强制将换行符转为CRLF,破坏规则。
内容的提问来源于stack exchange,提问作者Leo Lobeto
相关产品推荐
相关产品推荐

