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

Husky实战指南:从零开始配置Git钩子自动化

1. 为什么你需要Husky来管理Git钩子每次提交代码前你是否遇到过这些尴尬场景忘记运行测试用例导致线上报错、代码格式混乱被同事吐槽、提交信息不规范让团队一头雾水这些问题其实都可以通过Git钩子Git Hooks来解决。但原生Git钩子配置复杂需要手动修改.git/hooks目录下的脚本文件既不方便版本控制也难以团队共享。这就是Husky的价值所在。作为一个轻量级Git钩子管理工具Husky让配置变得像写package.json一样简单。我经历过一个真实案例团队新成员提交的代码频繁导致CI失败后来我们在项目中引入Husky强制在pre-commit阶段运行lint检查问题迎刃而解。现在每次git commit时Husky都会自动帮我们完成这些质量把关代码格式自动校验Prettier语法错误检查ESLint单元测试验证Jest提交信息规范Commitlint2. 五分钟快速搭建Husky环境2.1 基础环境准备首先确保你的项目满足以下条件已初始化Git仓库执行过git init使用npm/yarn管理依赖存在package.jsonNode.js版本≥12推荐LTS版本如果你是从零开始的新项目可以这样初始化mkdir my-project cd my-project git init npm init -y2.2 安装与初始化Husky现代前端项目推荐使用Husky 8版本它的配置比旧版更简洁。安装只需一行命令npm install husky --save-dev接着在package.json中添加prepare脚本这是Husky的魔法开关{ scripts: { prepare: husky install } }现在执行npm install时Husky会自动完成初始化。你也可以手动触发npm run prepare初始化完成后项目根目录会出现.husky文件夹这就是存放所有钩子脚本的地方。这个设计比直接修改.git/hooks更优雅因为可以纳入版本控制支持不同分支使用不同钩子配置脚本修改即时生效无需重启Git3. 配置你的第一个Git钩子3.1 pre-commit实战代码质量守卫让我们从最常用的pre-commit钩子开始。假设我们要在提交前执行ESLint检查先确保项目已安装ESLintnpm install eslint --save-dev然后创建pre-commit钩子npx husky add .husky/pre-commit npm run lint打开生成的.husky/pre-commit文件你会看到类似内容#!/bin/sh . $(dirname $0)/_/husky.sh npm run lint记得给脚本添加执行权限chmod x .husky/pre-commit现在尝试git commit时如果代码有ESLint错误提交会被自动拦截。我在实际项目中遇到过这种情况团队成员配置了husky但忘记加执行权限导致钩子不生效。所以chmod这步千万别漏3.2 多命令执行技巧当需要执行多个检查时推荐使用npm-run-all这类工具npm install npm-run-all --save-dev然后修改pre-commit为npx husky add .husky/pre-commit npx run-p lint test:unit这比直接用连接更可靠因为支持并行执行提升速度错误处理更友好输出日志更清晰4. 高级集成方案4.1 代码美化三件套结合PrettierESLintStylelint可以实现全栈代码风格统一。首先安装依赖npm install prettier eslint-config-prettier stylelint --save-dev然后创建.husky/pre-commit#!/bin/sh . $(dirname $0)/_/husky.sh npx pretty-quick --staged npx eslint --fix --ext .js,.vue src npx stylelint --fix **/*.{css,scss,vue}这里用到了几个实用技巧pretty-quick只处理暂存区文件速度更快eslint的--fix参数自动修复可修复的错误stylelint通配符匹配多种样式文件4.2 提交信息规范良好的commit message能提升团队协作效率。使用Commitlint可以强制遵循Angular提交规范npm install commitlint/cli commitlint/config-conventional --save-dev创建commitlint.config.jsmodule.exports { extends: [commitlint/config-conventional], rules: { type-enum: [2, always, [feat, fix, docs, style, refactor, test, chore]] } }添加commit-msg钩子npx husky add .husky/commit-msg npx commitlint --edit $1现在像update code这样的提交信息会被拒绝必须使用规范格式如feat: 添加用户登录功能 fix(router): 修复页面跳转404问题5. 企业级最佳实践5.1 微前端场景适配在monorepo项目中你可能需要根目录安装Husky每个子项目有自己的lint规则只检查变更的子项目这时可以改造pre-commit#!/bin/sh . $(dirname $0)/_/husky.sh # 获取变更文件列表 changed_files$(git diff --cached --name-only --diff-filterACM) # 只在有JS文件变更时运行ESLint echo $changed_files | grep -q \.js$ npm run lint:changed对应的package.json需要添加{ scripts: { lint:changed: eslint --fix $(git diff --name-only --diff-filterACM | grep \.js$) } }5.2 性能优化方案当钩子脚本执行较慢时可以使用lint-staged只检查暂存区文件对TypeScript项目启用增量编译并行执行独立任务典型配置示例npm install lint-staged --save-dev修改package.json{ lint-staged: { *.js: [eslint --fix, prettier --write], *.{css,scss}: [stylelint --fix] } }然后更新pre-commit#!/bin/sh . $(dirname $0)/_/husky.sh npx lint-staged6. 常见问题排查指南6.1 钩子不生效怎么办按照这个检查清单排查确认.husky目录存在且包含对应钩子文件检查钩子文件有可执行权限ls -la查看确保没有.git/hooks下的原生钩子冲突查看Git版本是否≥2.9git --version6.2 Windows环境适配在Windows上可能会遇到行尾符问题建议配置Git自动转换git config --global core.autocrlf true执行权限问题用IDE的终端替代cmd路径解析问题在脚本中显式指定node路径7. 版本升级迁移策略从Husky 4升级到8需要删除package.json中所有旧的husky配置移除.huskyrc.js等旧配置文件清理.git/hooks目录按照本文档重新配置对于大型项目建议创建迁移分支逐步验证。我曾帮一个React项目完成迁移关键是要确保CI环境兼容新版本所有开发成员同步更新文档及时更新8. 安全防护方案为防止恶意篡改钩子脚本可以在CI流程中校验.husky目录hash值使用lockfile校验package-lock.json配置pre-push钩子进行二次验证示例pre-push脚本#!/bin/sh . $(dirname $0)/_/husky.sh # 检查husky文件完整性 if ! sha256sum -c .husky/checksums.sha256; then echo husky文件校验失败请确认未被篡改 exit 1 fi

相关文章:

Husky实战指南:从零开始配置Git钩子自动化

1. 为什么你需要Husky来管理Git钩子 每次提交代码前,你是否遇到过这些尴尬场景:忘记运行测试用例导致线上报错、代码格式混乱被同事吐槽、提交信息不规范让团队一头雾水?这些问题其实都可以通过Git钩子(Git Hooks)来解…...

从原理到代码:手把手教你用sklearn实现TSNE降维(附常见问题解答)

从原理到实战:用sklearn的TSNE解锁高维数据可视化密码 当你面对成百上千维的数据时,是否感觉像在迷雾中摸索?传统的PCA虽然简单高效,但在处理复杂非线性结构时往往力不从心。这正是TSNE大显身手的地方——它能将高维数据的内在结构…...

【sap fiori 启动时加载数据】

fiori 程序启动时加载数据的配置 你可以设置为initialLoad Auto (默认)、 Disabled ,或者Enabled。 "SalesOrderManageList": {"type": "Component","id": "SalesOrderManageList","…...

从COM原理到实战:VC++驱动SOLIDWORKS二次开发的核心路径

1. COM组件原理:SOLIDWORKS二次开发的基石 第一次接触SOLIDWORKS二次开发时,我被各种接口指针搞得晕头转向。直到理解了COM组件的工作原理,才发现这些看似复杂的接口调用其实都有章可循。COM(Component Object Model)是…...

拓扑排序(模版

添加链接描述 拓扑排序不在乎自环和重复边&#xff0c;因为自环不会入队列&#xff0c;重复边会早晚入队列 每次把入边都减1&#xff0c;减为0的加入拓扑排序队列&#xff0c;并且更新答案 #include<bits/stdc.h> #include <iostream> using namespace std; const…...

如何通过命令行工具实现百度网盘高效管理?解锁终端下的文件传输新体验

如何通过命令行工具实现百度网盘高效管理&#xff1f;解锁终端下的文件传输新体验 【免费下载链接】BaiduPCS BaiduPCS - 一个用 C/C 编写的百度网盘命令行工具&#xff0c;支持多线程下载、断点续传、快速上传等功能。 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPC…...

突破加密音频壁垒:解密与转换技术全解析

突破加密音频壁垒&#xff1a;解密与转换技术全解析 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 如何解决加密音频播放限制&#xff1f; 当你从音乐平台下…...

基于Python实现高效DOI文献批量下载的自动化方案

1. 为什么需要批量下载DOI文献&#xff1f; 作为一名科研工作者&#xff0c;我深知查找和下载文献的痛苦。每次做课题研究&#xff0c;动辄需要下载几十篇甚至上百篇文献&#xff0c;如果一篇篇手动下载&#xff0c;不仅效率低下&#xff0c;还容易出错。特别是当我们需要追踪某…...

如何用TensorRT-LLM和Triton Server实现LLM的高效推理?详解In-flight Batching与流式响应

基于TensorRT-LLM与Triton Server的大模型推理优化实战指南 1. 大模型推理优化的核心挑战 在当今AI领域&#xff0c;大型语言模型(LLM)的推理部署面临着三大核心挑战&#xff1a;计算资源利用率低、响应延迟高以及并发处理能力有限。这些挑战直接影响了用户体验和基础设施成本。…...

3步打造无广告音乐体验:xManager开源音乐管理器全攻略

3步打造无广告音乐体验&#xff1a;xManager开源音乐管理器全攻略 【免费下载链接】xManager Ad-Free, New Features & Freedom 项目地址: https://gitcode.com/GitHub_Trending/xm/xManager 如何在享受音乐的同时摆脱广告骚扰与功能限制&#xff1f;开源音乐管理器…...

从原始字节到应用识别:基于1D-CNN的端到端加密流量分类实践

1. 加密流量分类的挑战与机遇 网络流量分类一直是网络安全和网络管理中的重要课题。随着加密技术的普及&#xff0c;越来越多的应用开始采用加密传输&#xff0c;这给传统的流量分类方法带来了巨大挑战。我曾在实际项目中遇到过这样的困境&#xff1a;面对加密流量&#xff0c;…...

3种技术方案深度解析:Mac Mouse Fix鼠标驱动高级配置与性能调优指南

3种技术方案深度解析&#xff1a;Mac Mouse Fix鼠标驱动高级配置与性能调优指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款专为ma…...

【轨物洞见】定义“视觉语音时代”:轨物科技重塑人机交互新范式

在深耕电力数字化转型的十五年间&#xff0c;轨物科技目睹了无数运维人员在传统开关柜的“黑箱”面前如履薄冰。在那个“人工时代”&#xff0c;倒闸操作严格遵循“操作票”制度&#xff0c;每一步都依赖“唱票、复诵、现场核对”。这种高度依赖人工经验的模式&#xff0c;早已…...

照着用就行:10个AI论文网站深度测评,全领域适配完成毕业论文+格式规范

面对日益繁重的学术任务&#xff0c;高校师生和研究人员在论文写作过程中常常面临诸多挑战&#xff1a;从选题构思到文献检索&#xff0c;从内容撰写到格式规范&#xff0c;每一步都可能成为效率的“瓶颈”。尤其是在AI技术快速发展的当下&#xff0c;如何选择一款真正高效、专…...

72小时内销售额达16.3亿美元:Ohana Development开发的Manchester City Yas Residences在阿布扎比创下新的销售纪录

• 35%的投资者为阿联酋公民&#xff0c;65%为外籍人士和国际投资者 • 这一里程碑体现了该项目强劲的市场需求&#xff0c;以及市场对阿联酋房地产行业的持续信心Ohana Development是阿联酋一家以豪华项目著称的领先房地产开发商&#xff0c;其位于阿布扎比亚斯运河沿岸的封闭…...

李慕婉-仙逆-造相Z-Turbo 互联网产品创新思维:用AI重新定义用户交互体验

李慕婉-仙逆-造相Z-Turbo 互联网产品创新思维&#xff1a;用AI重新定义用户交互体验 不知道你有没有过这样的感觉&#xff1a;现在的很多互联网产品&#xff0c;用起来总觉得有点“隔阂”。你想找一件衣服&#xff0c;得在搜索框里输入关键词&#xff0c;然后在几十页结果里翻…...

无线VR串流革命:ALVR如何让你摆脱线缆束缚

无线VR串流革命&#xff1a;ALVR如何让你摆脱线缆束缚 【免费下载链接】ALVR Stream VR games from your PC to your headset via Wi-Fi 项目地址: https://gitcode.com/gh_mirrors/alvr/ALVR ALVR&#xff08;Air Light VR&#xff09;是一款开源无线VR串流解决方案&am…...

【OpenCV 图像处理实战:从直方图到透视变换全攻略】

本文将系统梳理 OpenCV 中直方图统计、Mask 掩模、直方图均衡化、图像透视变换四大核心技术&#xff0c;结合完整代码与详细解析&#xff0c;带你从基础到进阶掌握图像处理实战技能。一、图像直方图&#xff1a;像素分布的可视化直方图是图像像素灰度级分布的直观表达&#xff…...

SiameseUIE中文-base部署教程:nvidia-smi监控GPU利用率实操指南

SiameseUIE中文-base部署教程&#xff1a;nvidia-smi监控GPU利用率实操指南 1. 引言&#xff1a;从零开始&#xff0c;让AI帮你读懂中文 你是不是经常遇到这样的场景&#xff1a;面对一堆杂乱的中文文档&#xff0c;需要快速找出里面的人名、公司名、关键事件&#xff0c;或者…...

Halcon算子实战:从图像处理到工业检测的20个高频使用技巧

Halcon算子实战&#xff1a;从图像处理到工业检测的20个高频使用技巧 在工业自动化领域&#xff0c;机器视觉系统正成为生产线上的"火眼金睛"。作为业界领先的视觉算法库&#xff0c;Halcon凭借其丰富的算子集合和高效的图像处理能力&#xff0c;正在重塑现代工业检测…...

GC 怎么判定“该回收谁”:GC Roots、可达性分析、四种引用与回收算法

很多人学 GC 的痛点是&#xff1a; 名词一堆&#xff1a;标记清除、复制、标记整理、分代但一旦你真遇到“内存回不去”&#xff0c;你又不知道该从哪里解释 这篇把 GC 的主线拆成两条&#xff1a; 先判定谁活谁死&#xff08;可达性分析&#xff09;再决定怎么回收&#xff08…...

PyFMI实战指南:从FMU文件解析到动态模型仿真

1. PyFMI与FMU基础入门 第一次接触PyFMI和FMU时&#xff0c;我也被这些缩写搞得一头雾水。简单来说&#xff0c;PyFMI是一个Python工具包&#xff0c;专门用来和FMU文件打交道。那FMU又是什么呢&#xff1f;你可以把它想象成一个黑盒子&#xff0c;里面装着各种数学模型和算法。…...

【技术评审版】分布式 AI 代码智能体集群系统架构与技术方案设计文档 1 / 光子 AI

分布式 AI 代码智能体集群系统架构与技术方案设计文档 文档版本: v1.0 创建日期: 2026-03-19 文档状态: 技术评审版 保密级别: 内部机密 目录 项目概述 系统架构设计 系统模块设计 领域模型设计 业务流程设计 系统交互设计...

Linux cgroup v2实战指南:从基础配置到容器资源隔离

Linux cgroup v2实战指南&#xff1a;从基础配置到容器资源隔离 1. 理解cgroup v2的核心架构 cgroup v2作为Linux内核资源管理的关键机制&#xff0c;彻底重构了v1版本的多层级设计。其核心改进体现在三个方面&#xff1a; 统一层级结构&#xff1a;采用单一树状组织&#xff0…...

MAI-UI-8B LaTeX文档自动化:智能排版与公式识别

MAI-UI-8B LaTeX文档自动化&#xff1a;智能排版与公式识别 还在为LaTeX文档的繁琐排版和公式编辑而头疼吗&#xff1f;MAI-UI-8B带来的LaTeX自动化处理能力&#xff0c;让文档编写效率提升3倍不止&#xff01; 1. LaTeX文档处理的痛点与挑战 写学术论文、技术文档时&#xff…...

得物API签名逆向踩坑记:如何破解048a9c4943398714b356a696503d2d36这个神秘字符串

解密得物API签名中的神秘字符串&#xff1a;逆向工程实战指南 在电商平台数据采集过程中&#xff0c;API签名机制往往是开发者遇到的第一道门槛。最近在研究得物APP的数据接口时&#xff0c;发现其请求参数中总是携带一个固定字符串"048a9c4943398714b356a696503d2d36&quo…...

ARM边缘设备实战:从源码到应用,手把手部署Pynini文本处理引擎

1. 为什么要在ARM边缘设备上部署Pynini&#xff1f; 最近几年&#xff0c;边缘计算设备越来越火&#xff0c;像Jetson Orin Nano这样的ARM架构开发板凭借其出色的能效比&#xff0c;在各类AI应用中大显身手。但当我们想在边缘设备上跑一些文本处理任务时&#xff0c;往往会遇到…...

光纤VS铜缆:实测对比千兆网络下20KM传输延迟差异(附测试方法)

光纤VS铜缆&#xff1a;千兆网络20KM传输延迟实测与选型指南 当企业面临网络基础设施升级时&#xff0c;传输介质的选择往往成为技术决策的难点。尤其在跨楼宇、园区或远距离数据传输场景中&#xff0c;光纤与铜缆的性能差异直接影响到业务系统的响应速度和稳定性。本文将通过实…...

RAG流程卡点在哪?BGE-Reranker-v2-m3部署问题全解析

RAG流程卡点在哪&#xff1f;BGE-Reranker-v2-m3部署问题全解析 你是不是也遇到过这样的情况&#xff1a;搭建的RAG系统明明检索出了一堆文档&#xff0c;但大模型给出的答案却总是跑偏&#xff0c;要么答非所问&#xff0c;要么干脆胡编乱造&#xff1f; 问题很可能就出在“…...

从CNN到RCNN:目标检测技术的演进与核心差异

1. 目标检测技术的前世今生&#xff1a;从图像分类到物体定位 想象一下你正在教一个三岁小孩认识动物。给他看一张动物园的照片&#xff0c;如果只是问"这是什么动物&#xff1f;"&#xff0c;他可能会回答"狮子"——这就是典型的图像分类任务。但如果你指…...