news 2026/9/19 5:34:18

lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路

lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路

【免费下载链接】lint-staged🚫💩 — Run tasks like formatters and linters against staged git files项目地址: https://gitcode.com/gh_mirrors/li/lint-staged

lint-staged 是一款流行的 Git 提交前检查工具:当你git add暂存文件后,它只对这些改动过的文件自动运行 ESLint、Prettier 等检查和格式任务,并把修复结果自动加回提交。全文通过 10 个由浅入深的实战示例,手把手教你把 lint-staged 与 ESLint、Prettier、Stylelint、Flow 组合成一套"提交即干净"的完美工作流,新手也能 10 分钟配好。

一、30 秒看懂 lint-staged 为什么好用 🚀

相比对整个项目跑一遍 lint,lint-staged 只盯着"要提交的改动",带来四个直接好处:

  • :文件少,任务秒级完成,提交不再卡
  • :任务修改后的文件会自动重新暂存,不会丢改动
  • 安全:默认先创建 git stash 备份,出错自动恢复原状
  • 灵活:用 glob 匹配文件,可以挂任意命令(lint、format、甚至跑测试)

更多背景介绍见官方文档 README.md。

二、一次性安装与配置:最快上手 4 步 ⚙️

npm install --save-dev lint-staged npx husky init

然后在.husky/pre-commit里写入一行:

npx lint-staged

最后在package.json中添加lint-staged配置对象(注意不要传文件路径参数,它会自动帮你拼接):

{ "lint-staged": { "*.{js,jsx}": "eslint --fix" } }

至此,每次git commit都会先跑检查,不通过就自动拦截。项目自己的配置就长这样,可以参考 lint-staged.config.js。

三、10 个实战示例:从入门到完美组合 ✨

示例 1:ESLint pre-commit 基础检查

最基础的用法——提交前对暂存的 JS/JSX 文件做语法与规范检查,有问题直接拦截提交:

{ "*.{js,jsx}": "eslint" }

示例 2:ESLint --fix 自动修复可修复项

加上--fix后,分号、引号、未使用变量等问题会被自动修好,修复结果自动加入本次提交,你甚至感觉不到它的存在:

{ "*.js": "eslint --fix" }

示例 3:Prettier 全量格式化任意文件

--ignore-unknown让 Prettier 跳过自己不支持的文件,一行配置覆盖整个仓库的格式统一:

{ "*": "prettier --ignore-unknown --write" }

示例 4:Prettier 指定多语言文件

只想格式化代码和文档类文件?用花括号语法一次列出多扩展名:

{ "*.{js,jsx,ts,tsx,md,html,css}": "prettier --write" }

示例 5:ESLint + Prettier 黄金组合(数组顺序执行)⭐

同一 glob 下想跑多个命令,用数组表示"按顺序串行":先eslint --fix修逻辑问题,再prettier --write统一格式,顺序保证不会互相打架:

{ "*.js": ["eslint --fix", "prettier --write"] }

这是最推荐的核心套路,官方文档中的 Examples 章节 也以此为例。

示例 6:Stylelint 检查 CSS 与 SCSS

CSS 有自己的"语法检查器" Stylelint,可按文件类型分别指定语法:

{ "*.css": "stylelint", "*.scss": "stylelint --syntax=scss" }

示例 7:PostCSS 属性排序 + Stylelint 复检

用数组把"排序"和"检查"串起来:先跑 PostCSS 的--replace原地排序,再让 Stylelint 确认通过:

{ "*.scss": ["postcss --replace", "stylelint"] }

示例 8:Flow 类型检查只跑改动文件

Flow 的focus-check命令天然适合 lint-staged——只检查你改动的文件,速度远快于全量 check:

{ "*.{js,jsx}": "flow focus-check" }

示例 9:函数式配置,tsc 全量类型检查不传文件参数

TypeScript 有个坑:直接传文件名会让tsc忽略tsconfig.json。lint-staged 支持在函数里自定义命令——直接返回不带文件参数的命令即可:

// lint-staged.config.js export default { '*.{ts,tsx}': () => 'tsc --noEmit', }

函数的完整类型定义可查 lib/config.d.ts。

示例 10:并行任务与 glob 冲突的终极解法 💪

两个 glob 都写文件时会发生"竞态"(如*跑 prettier、*.ts跑 eslint --fix 同时改一个文件)。官方推荐用取反 glob + 数组顺序彻底解决;想提速时,把命令再套一层数组即可并行执行:

{ "!(*.ts)": "prettier --write", "*.ts": ["eslint --fix", "prettier --write"] }
{ "*.ts": [["prettier --write", "eslint"]], "*.md": "prettier --write" }

四、新手避坑速查表 📋

场景建议
想看全部任务的报错--continue-on-error,跑完再汇总失败
调试"我的文件为什么没被匹配"--debug查看文件列表与执行的命令
monorepo 多包项目每个包放独立配置文件,自动匹配最近的配置
命令参数过长(常见于 Windows)--max-arg-length控制分片
升级大版本遇到不兼容查阅迁移指南 MIGRATION.md

写在最后

lint-staged 的价值不在于"再装一个工具",而是把ESLint 查规范、Prettier 管格式、Stylelint 管样式、Flow 管类型这四件事按正确的顺序编排到提交环节。从示例 1 开始逐步叠加,你的仓库将在不知不觉中保持干净——不让任何"代码便便"溜进提交历史 🚫💩。

【免费下载链接】lint-staged🚫💩 — Run tasks like formatters and linters against staged git files项目地址: https://gitcode.com/gh_mirrors/li/lint-staged

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 5:30:39

UE5 VR模拟器开发实战:免硬件高效验证XR交互

1. 这不是“替代VR设备”,而是把开发效率拉满的务实路径你搜“UE5 VR开发”,十有八九会看到一堆“必须配Varjo、Pico Neo 3 Pro、Quest 3”的硬件清单,再配上动辄上万的预算说明。但现实是:一个刚接触XR开发的美术、策划或独立开发…

作者头像 李华
网站建设 2026/9/19 5:30:16

前端解析海康PS流提取H264裸流实战指南

1. 为什么必须从PS流里“抠”出H264裸流?——海康设备回放的底层真相你用过海康威视的IPC或NVR吗?点开Web端回放,画面流畅;调用官方WebSDK,也能播;但一旦你想在自己的Vue/React项目里嵌入一个自定义播放器、…

作者头像 李华
网站建设 2026/9/19 5:29:17

基于Dify+FireCrawl+百度搜索搭建全能研究助手工作流

做AI应用的朋友应该都有同感:单聊机器人谁都会搭,但要让一个智能体真正承担“研究”这种活,难度完全不在一个量级。研究意味着它要自己找线索、筛信息、抓原文、读内容、再组织成结论,链条长且每一步都容易断。我最近基于 Dify 把…

作者头像 李华
网站建设 2026/9/19 5:28:09

ITIL4服务目录管理:从“救火队”到“服务专家”的转型指南

先纠正一个常见的误读:ITIL4里的“服务目录管理”,并不是让你把公司IT服务做成一张“菜单”挂在墙上就完事,也不是简单地把服务器、网络、应用软件列个清单。我见过太多团队把服务目录做成“资产台账”,最后沦为摆设,一…

作者头像 李华