✨ feat: 自动给git提交添加emoji 无需手动输入
2024-09-11
785 字约 3 分钟
...

很多人都用过GCW,或者类似的工具,但这些工具都需要靠手动书写、命令行工具、vscode插件来添加emoji,不太方便,本身emoji意义不大只是锦上添花的东西,本文通过几行简单的自定义脚本来自动添加emoji, 锦上添花的同时没有任何额外负担
- 不用手动输入
:gitmojicode:,根据type自动添加,也可以根据type scope组合
> git commit -m 'feat: hello'
✨ feat: hello
> git commit -m 'fix: server crash'
🐛 fix: server crash
-
支持用任何工具提交
- 命令行
- GUI图形化
-
自定义emoji映射
- feat(core): 🥇
- feat(ui): 🥈
- feat(utils): 🥉
- 使用commitlint校验格式,确保符合conventionalcommits规范
- 使用husky来添加git hook,在提交时对commit message校验
- 编写自定义脚本来给提交信息添加emoji (关键)
npm install --save-dev @commitlint/{cli,config-conventional} husky
echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
配置好后可以试一下
npx commitlint --from
执行后会对git log中的所有提交信息lint校验,如果你以前提交的符合规范则不会输出错误信息,这里只是尝试一下确保能正常生效。
这个工具的原理是注册git hook,让git提交的时候执行注册时的脚本,如果脚本报错则放弃提交。
基于这个原理,我们先执行以下脚本引导husky注册
npx husky
注意,以上是手动注册,意味着只会在你本机生效,因此我们添加一个npm脚本来确保其他开发同学能自动注册
package.json
"scripts": {
"prepare": "husky"
},
这样只要执行了npm install就会自动引导husky从而注册git hook
.husky/commit-msg-emoji.js
import { readFileSync, writeFileSync } from "fs";
const typeToEmojiMap = {
chore: "🎨",
feat: "✨",
fix: "🐛",
};
const COMMIT_EDITING_FILEPATH = process.argv.at(-1);
const inputMsg = readFileSync(COMMIT_EDITING_FILEPATH, "utf8");
writeFileSync(COMMIT_EDITING_FILEPATH, transform(inputMsg, typeToEmojiMap), "utf8");
function transform(inputMsg, typeToEmojiMap) {
const [type, emoji] =
Object.entries(typeToEmojiMap).find(([type]) =>
inputMsg.startsWith(type),
) ?? [];
if (type) {
return inputMsg.replace(new RegExp(`^${type}`), `${emoji} $&`);
}
throw new Error('Invalid type')
}
注意我是用esm写的,你也可以用commonjs
这段脚本很简单,读取用户输入的提交信息,修改提交信息添加emoji,保存提交信息。
只需要通过配置 typeToEmojiMap 变量中的映射即可,例如
const typeToEmojiMap = {
chore: "🎨",
feat: "✨",
fix: "🐛",
'feat(core)': 🥇
};
.husky/commit-msg
npx --no -- commitlint --edit $1
node .husky/commit-msg-emoji.js $1
第一行注册commitlint,校验提交的格式
第二行注册我们自己的脚本,修改提交信息添加emoji
需要注意的是,自定义脚本要在commitlint后面执行,这样emoji就不会参与lint
完成上面的所有配置后,现在可以提交体验一下了
git add .
git commit -m 'feat: auto add emoji'
...
[main 6b0efac] ✨ feat: auto add emoji
如果您觉得这篇文章有帮助,请点个赞吧~
相关文章
更多文章 →前端规范2024-12-04
Husky(husky9.x版本适配) + Lint-staged + Commitlint + Commitizen
Husky Husky 是 钩子工具,可以设置在 git 各个阶段(pre commit、commit msg 等)触发。 官方网站: Husky 安装方式: 安装命令: 自动生成的 目录和指令: Lint staged lint staged 是一个在 git add 到暂存区的文件运行 linters (ESLint/Prettier/StyleLint) 的工具,避免在 git commit 提交时在整个项目执行。 可以让你当前的...
学习
前端规范2024-09-10
从HTML活动页面到 Vue、React 大型项目都通用的 git hooks 配置
git提交时不加审核,团队内的git规范很容易被一次次的样式拉扯修改、小bug调整等git提交给冲得稀烂。这时候可以使用 git 原生的 hooks,在 commit 之前监听一下 commit 内容。但是原生 git hooks 的配置默认是不同步到仓库的,这样一来,配置好的 hooks 事件其实就是本地单机事件,无法很好的团队共享。而 + 刚好能处理这个场景。 Husky Husky 是一个 Git Hook 工具,它允许开发者在...
学习
前端规范2023-07-06
nextjs项目配置eslint+prettier
一、安装 \+ prettier + eslint plugin prettier 二、配置.eslintrc.json 三、配置.prettiterrc.js
学习
http-网络2026-10-15
OAuth 2.0是什么,以及如何正确接入
一、先从一个需求理解 OAuth 2.0 假设你开发了一个相册整理工具,用户希望它读取某个云盘里的照片。 把云盘密码交给工具,会带来几个问题:工具拿到的权限太大,密码可能泄漏,用户也难以只撤销这个工具的访问。 OAuth 2.0 提供一套 委托授权机制 :用户在云盘自己的页面确认授权,工具取得一个有权限范围和有效期的访问令牌,再用它调用云盘 API。用户的云盘密码不交给工具。 可以把它理解为:给工具一张“限定用途的通行证”。但令牌泄漏同...
学习
前端2026-10-15
前端动画全景指南
一、前端动画到底是什么 前端动画,就是让画面随时间、用户输入或页面状态连续变化。变化的对象可以是按钮的位置、弹窗的透明度、SVG 的线条、Canvas 里的粒子,也可以是三维场景中的镜头。 先把三个问题分开: | 问题 | 常见答案 | | | | | 画什么? | DOM/CSS、SVG、Canvas 2D、GPU 渲染的场景、预制动画素材 | | 怎样变化? | CSS 过渡/关键帧、Web Animations API、逐帧计算、...
学习
flutter2026-10-14
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK Android 正式签名不需要购买证书。开发者可以自己生成密钥,用它给 APK 签名;密钥的用途是建立稳定的应用身份。签名有效并不等于应用已经通过商店审核,也不等于应用功能已完成真机验收。 本文面向 Flutter Android 项目,介绍从开发签名切换到独立正式签名的完整流程。应用名称、目录、包名和证书信息均使用通用示例,不包含真实项目密码、私钥、签名指...
学习
评论
请登录后发表评论
去登录