StyleLint 报错 “Expected newline after {” 到底怎么解决?

UE丶艺馨 阅读 20

我在写 CSS 的时候,StyleLint 一直报错说“Expected newline after {”,但我明明已经换行了啊!

我的规则是用的 standard 配置,试过在花括号后面加空格、删空格都不行。下面是我写的代码:

.button {
  color: red;
}

这看起来完全正常,为什么还会报这个错?是不是配置哪里有问题?

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
UX-梦媛
UX-梦媛 Lv1
这破问题我也遇到过,standard配置确实有点矫情。你的代码看着没问题,但可能配置里还套了别的规则。

直接用这个修复方案:
1. 确认你的.stylelintrc文件里有这个配置:
{
"rules": {
"block-opening-brace-newline-after": "always"
}
}


2. 如果还不行,试试把文件格式改成这样(注意花括号后必须换行):
.button
{
color: red;
}


standard配置有时候会和其他规则打架,实在不行就关掉这个检查:
{
"rules": {
"block-opening-brace-newline-after": null
}
}


妈的,这些lint工具有时候真的烦,明明代码能跑非要纠结格式。
点赞 1
2026-03-09 14:19
❤恒博
❤恒博 Lv1
根本原因是 StyleLint 的 stylelint-config-standard 里默认开启了 block-opening-brace-space-after 这个规则,它要求花括号后面必须有换行符,但你写的代码里花括号后面紧跟着的是换行符,问题出在换行符的类型上。

很多编辑器(特别是 Windows 上的 VS Code 或记事本)默认用的是 CRLF(回车+换行,即 rn),而 StyleLint(以及绝大多数前端工具链)统一要求用 LF(换行符,n)。虽然肉眼看不出来区别,但 StyleLint 的解析器是严格按字节检测的,CRLF 会被识别成“花括号后面不是换行符”,而是“花括号后面是回车符再加换行符”,所以报错。

你可以用 VS Code 右下角的状态栏看看当前文件的行尾符是不是 CRLF,如果是,点一下改成 LF,再保存文件试试。或者用 file 命令(Linux/macOS)或者 hexdump -C 看文件的十六进制内容,确认是不是 rn

如果想一劳永逸解决,可以在 .stylelintrc 里显式配置:

{
"extends": "stylelint-config-standard",
"rules": {
"block-opening-brace-space-after": "always-single-line"
}
}


不过更推荐的做法是全局统一换行符为 LF,因为除了 StyleLint,Git、ESLint、Prettier 这些工具也都默认用 LF。可以在 .editorconfig 里加一句:

[*]
end_of_line = lf


或者在 VS Code 里设置 Files: Eoln,然后批量替换整个项目里的换行符(可以用 sed -i 's/r$//' **/*.css 这种命令批量处理,不过记得先备份)。

另外提醒一句,如果你用的是 Prettier,它会自动统一换行符,但有时候 Prettier 和 StyleLint 的规则冲突也会导致这种诡异报错,所以最好保证它们的配置方向一致,比如都用 LF,都要求花括号后换行。我之前就踩过坑,Prettier 改了换行符但没重新保存,StyleLint 还在用旧缓存,报了一堆奇怪的错,重启编辑器才好。
点赞 2
2026-02-25 10:03