为什么我的ESLint在GitHub Actions中检测到错误但构建还是通过了?

UE丶玉霞 阅读 33

我给项目配置了ESLint,并在GitHub Actions里加了lint检查步骤。但今天提交了一个明显违反规则的代码(比如少了个分号),控制台确实输出了错误,但最后构建状态还是显示成功了。我检查了.eslintrc里的规则配置没问题,也确认工作流文件里执行了npm run lint,但就是无法让CI阻塞构建。错误信息里显示ESLint的exit code是0,这正常吗?


# GitHub Actions步骤片段
- name: Lint Check
  run: npm run lint

之前本地跑npm run lint会直接报错退出,但CI环境就是不报错。难道需要额外配置ESLint的exit策略吗?

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
迷人的红辰
ESLint 默认在有错误时会返回非 0 exit code,但如果你的 npm run lint 脚本用了 eslint . 或类似命令却没报错,大概率是 CI 里用了 --quiet--max-warnings=0 之类的参数被覆盖了,或者你的 lint 脚本里加了 || true

直接检查你 package.json 里的 lint 脚本,比如:

"lint": "eslint src --ext .js,.jsx,.ts,.tsx"


确保没加 || true--quiet,然后 GitHub Actions 里就直接用:

- name: Lint Check
run: npm run lint


本地和 CI 行为不一致?八成是 CI 用的 Node/npm 版本不同,或者 node_modules 缓存了旧版本的 eslint,加个 npm cinpm install --no-fund 重装试试。
点赞 5
2026-02-24 21:12
诸葛美玲
问题出在ESLint的exit code上,CI环境默认不把警告当作错误。直接这样改你的npm脚本:

"scripts": {
"lint": "eslint . --max-warnings=0"
}


或者在GitHub Actions里强制检查退出码:

- name: Lint Check
run: npm run lint && echo "Lint passed" || (echo "Lint failed" && exit 1)


这两种方式都能让CI在有ESLint错误时正确退出,选一个用就行。
点赞 6
2026-02-15 22:33