当前位置: 首页 > news >正文

lefthook如何与其他工具组合使用?

lefthook 作为一个高性能、跨语言的 Git hooks 管理工具,设计上非常注重组合性(composability)。它本身不提供 linting、formatting、testing 等具体功能,而是通过调用你项目中已有的工具(如 ESLint、Prettier、TypeScript、Vitest、Go vet、Rust clippy 等)来实现自动化。

以下是 lefthook 与其他常用工具组合使用的典型方式和最佳实践:


✅ 1. 与代码格式化/检查工具组合(前端)

示例:ESLint + Prettier

# .lefthook.yml
pre-commit:parallel: true  # 并行执行,更快commands:eslint:glob: "*.{js,ts,jsx,tsx,vue}"run: npx eslint {staged_files} --fixprettier:glob: "*.{js,ts,json,md,yml,yaml,css,scss,vue,html}"run: npx prettier --write {staged_files}

技巧:使用 {staged_files} 自动传入暂存文件列表,避免全量扫描。


✅ 2. 与类型检查工具组合

示例:TypeScript 类型检查

pre-commit:commands:type-check:glob: "*.{ts,tsx}"run: npx tsc --noEmit

⚠️ 注意:tsc --noEmit 只做类型检查,不生成文件。


✅ 3. 与测试框架组合

示例:运行单元测试(Vitest / Jest)

pre-push:commands:test:run: npm run test:unit -- --passWithNoTests

建议:将耗时较长的测试放在 pre-push 而非 pre-commit,避免阻塞提交。


✅ 4. 与提交信息规范工具组合

示例:commitlint(校验 commit message 格式)

commit-msg:commands:commitlint:run: npx commitlint --edit {1}

📝 需要配合 @commitlint/config-conventional 等规则包使用。


✅ 5. 与多语言工具链组合(后端/全栈项目)

示例:Go 项目

pre-commit:commands:go-fmt:glob: "*.go"run: go fmt {staged_files}go-vet:glob: "*.go"run: go vet ./...

示例:Rust 项目

pre-commit:commands:rust-fmt:glob: "*.rs"run: cargo fmt -- {staged_files}clippy:run: cargo clippy -- -D warnings

优势lefthook 无需 Node.js,Go/Rust 开发者可直接使用。


✅ 6. 与 Husky 迁移(替代方案)

如果你之前用 husky + lint-staged,可以完全迁移到 lefthook

Husky + lint-staged lefthook
.husky/pre-commit .lefthook.yml 中的 pre-commit
lint-staged 配置 commands + glob + {staged_files}

✅ 7. 高级技巧:复用 npm scripts

你可以直接调用 package.json 中定义的脚本,保持逻辑集中:

// package.json
{"scripts": {"lint": "eslint src --ext .ts,.tsx","format": "prettier --write src"}
}
# .lefthook.yml
pre-commit:commands:lint:run: npm run lintformat:run: npm run format

⚠️ 注意:这种方式会全量运行,而非仅处理 staged 文件。如需过滤,仍建议在 run 中直接写命令并使用 {staged_files}


✅ 8. 跳过钩子(临时)

开发时可通过以下方式跳过:

git commit --no-verify  # 跳过所有 pre-commit 钩子

🔧 安装与初始化

  1. 安装 lefthook(推荐全局或项目本地):

    # 全局(推荐)
    npm install -g lefthook
    # 或 pnpm/bun
    
  2. 在项目根目录初始化

    lefthook install
    
  3. 创建 .lefthook.yml 并配置(如上所示)。


✅ 总结:lefthook 的组合哲学

  • 不重复造轮子:调用你已有的 CLI 工具。
  • 按需触发:通过 glob{staged_files} 精准运行。
  • 跨语言支持:无论 JS/TS/Go/Rust/Python,只要能命令行调用即可。
  • 高性能:Go 编写,毫秒级启动,不影响开发体验。

💡 最佳实践:将 lefthook 作为你的 Git 自动化中枢,统一管理所有 pre-commit / pre-push / commit-msg 等任务,替代 Husky + lint-staged + commitlint-cli 的组合,更简洁高效。

http://www.gsyq.cn/news/117390.html

相关文章:

  • [GKCTF 2020]CheckIN
  • 基于大数据的交通信号智能控制系统的设计与实现开题报告
  • 在职备战法考,先择校还是先备考?
  • LangChain 1.0重大革新:如何结合Milvus构建生产级Agent全攻略!
  • 多线程核心:互斥与同步
  • 如何在Linux开发板上打印自己的启动LOGO
  • 从 “吹爆” 到 “冷静”:AIGC + 低代码为何难破企业级开发的硬骨头?
  • 基于大数据的高校学生健康服务系统的设计与实现开题报告
  • 【SpringMVC】请求接收与结果响应
  • 非官方接口实现中数据安全与隐私保护的考量
  • 基于SpringBoot的企业财务管理信息系统的设计与实现(程序+文档+讲解)
  • MySQL参数配置一次说清楚
  • centos7 磁盘I/O性能
  • 机器人操作空间速度计算python几种实现函数
  • 告别 LLM 输出的不确定性:深度解析 TypeChat 如何重塑 AI 工程化开发
  • 透过格子玻尔兹曼LBM实现三相驱替:油、水、二氧化碳三组分动态模拟与研究
  • 格子玻尔兹曼方法(LBM)的MRT作用力模型
  • LLC谐振变换器的控制策略多种多样,今天咱们就来聊聊几种常见的闭环仿真方法,顺便用Matlab/Simulink来搞点代码,看看这些控制策略在实际中是怎么玩的
  • 多孩家庭首选 30-40 万新能源7座车型推荐 - 速递信息
  • API赋能:消金电销无缝联的革新实践
  • 力扣 “两数之和” 最优解:哈希表 O (n) 时间复杂度实现详解
  • 基于WEB的高校计算机数据库课程知识图谱系统的设计与实现
  • 2025雅思择校不踩坑!机构综合实力TOP榜祝你选择!! - 速递信息
  • 优化实践:提升 1688 商品详情 API 接口稳定性和数据获取效率
  • TLS网络安全协议巩固知识基础题(2)
  • 聚焦家庭需求:20 万左右新能源 SUV 空间与安全优选车型
  • 数学刷题总结
  • Simulink仿真模型中同步电机的死区补偿与自适应补偿实践
  • 基于微服务器架构的小区物业管理系统的设计与实现
  • scheme中的序列操作