lint-staged如何并发运行任务?--concurrent参数与嵌套数组配置语法终极指南

发布时间:2026/9/19 6:33:34
lint-staged如何并发运行任务?--concurrent参数与嵌套数组配置语法终极指南 lint-staged如何并发运行任务--concurrent参数与嵌套数组配置语法终极指南【免费下载链接】lint-staged — Run tasks like formatters and linters against staged git files项目地址: https://gitcode.com/gh_mirrors/li/lint-stagedlint-staged是一个在git commit时只对暂存staged文件运行格式化、lint 等任务的工具而「任务并发运行」是它最值得了解的性能特性多个 glob 命令默认同时启动--concurrent参数控制并发数量嵌套数组语法则让同一组文件内的任务也能并行执行。本文带你一次看懂 lint-staged 的并发机制与配置语法清单。默认行为所有 glob 的任务同时启动lint-staged 默认以「无限并发」运行任务——每个 glob 匹配到的命令都会同时启动{ *.ts: eslint, *.md: prettier --list-different }eslint和prettier会同时开始两个 glob 组之间互不等待。通常 glob 不重叠、命令只报错不改文件所以这种默认行为几乎没有副作用。--concurrent 参数完整取值清单-p, --concurrent number|boolean是唯一控制并发的命令行开关默认值为true取值含义true默认无限并发尽可能多地并行运行任务{number}同时最多运行 N 个任务如--concurrent 21等价于falsefalse串行执行一个任务跑完才跑下一个几个容易踩坑的细节传数字必须是正整数否则 validateOptions.js 会直接报concurrent Must be boolean, positive integer or Infinite错误该参数只影响顶层 glob 任务组的并发不影响子任务顺序同一 glob 内的数组任务永远按序执行Node API 中同样支持concurrent?: boolean | number选项见 index.d.ts 与 runAll.js。npx lint-staged --concurrent 2 # 最多 2 个 glob 任务并行 npx lint-staged --concurrent false # 完全串行参数默认值true的设置在 parseOptions.js 中而 CLI 帮助文案含短选项-p在 cli.js 里定义。三层语法串行、嵌套数组并行配置中「值」的形态直接决定执行方式这是 lint-staged 并发配置的核心清单配置写法执行方式*.js: eslint单命令*.js: [a, b]一层数组串行a 成功后才跑 b*.js: [[a, b]]嵌套数组a 与 b并行运行*.js: [a, [b, c], d]a → (b ∥ c) → d先串行、中间并行、再串行也就是说glob 之间天然并行同一 glob 内一层数组串行再嵌套一层数组就变成并行。例如{ *.ts: [[prettier --list-different, eslint]], *.md: prettier --list-different }prettier和eslint会对*.ts文件同时运行而*.md组也和它们同时进行。源码视角并发是如何实现的核心逻辑在 runParallelTasks.jsparseConcurrencytrue或Infinity归一化为无限并发false、小于 1 或非整数则退化为串行1runSequential函数遍历任务列表遇到普通任务就 await 串行执行遇到嵌套数组就Promise.all并行执行——这正是嵌套数组语法的实现来源顶层用「worker 池」模式Math.min(allPerGlobTasks.length, concurrency)个 worker 各自领取 glob 任务组循环执行这就是--concurrent 2能精确限制并发的原因。配置的类型定义也很直白config.d.ts 中ParallelTasks并行任务组可以嵌进SequentialTasks串行任务序列与上面的语法清单一一对应。避坑指南并行 改文件 竞态条件当 glob 重叠且任务会修改文件时并行会产生竞态race condition{ *: prettier --write, *.ts: eslint --fix }prettier和eslint可能同时改写同一个*.ts文件。两种安全解法否定模式 数组串行让同一文件上的修改按序进行{ !(*.ts): prettier --write, *.ts: [eslint --fix, prettier --write] }限制并发度--concurrent number或--concurrent false牺牲速度换确定性。常见问题速查子任务能并行吗嵌套数组只能嵌套一层且数组内的子任务之间是并行的数组本身之间仍是串行的--concurrent不影响这一层。如何调试任务启动顺序加--debug参数lint-staged:runParallelTasks调试日志会打印每个 glob、每组并行任务的启动信息。monorepo 多个配置文件呢多个配置文件相当于多组 glob同样遵循顶层并发规则详见 README.md 的 monorepo 章节。任务失败了其他任务还会跑吗默认会「提前退出」加--continue-on-error可让所有任务跑完再统一报错。写在最后lint-staged 的并发模型可以浓缩为一句话glob 之间并行、数组串行、嵌套数组并行--concurrent控制并行数量。理解了 runParallelTasks.js 中的 worker 池与Promise.all两层机制你就能根据项目规模在「速度」与「确定性」之间自由取舍。输出文章【免费下载链接】lint-staged — Run tasks like formatters and linters against staged git files项目地址: https://gitcode.com/gh_mirrors/li/lint-staged创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询