✨ 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
学习
八股文2026-07-30
一、TypeScript与类型系统(20题)
1\. 在定义AI接口返回的嵌套数据结构(如多轮对话、工具调用结果)时,如何用TypeScript的泛型与条件类型实现灵活的类型推导? 场景:为“AI助手”定义统一的消息类型系统,需兼容不同模型供应商(OpenAI/Anthropic)及内部(Moonshot)的返回格式。 核心答案: 构建一个以泛型为基础、条件类型为分支的层次化类型系统。核心是利用泛型参数化“消息内容”、“工具调用”和“提供商”,再通过条件类型精确匹配不同场景下的数据...
学习
godot2026-07-27
Godot 4 常用 UI 节点详解
Godot 4 常用 UI 节点详解 在 Godot 4 中,UI 系统基于 Control(控件) 节点构建。所有 UI 节点都继承自 Control,形成一棵完整的 UI 树。与游戏引擎中常见的"Canvas + DOM"模式不同,Godot 的 UI 系统是声明式的——你在场景中搭好节点树,引擎自动完成布局计算。 一、布局系统:Container 家族 Container 是 Godot UI 的 骨架 。它决定了子节点的大小和位...
学习
cocos2026-07-22
🎯 Cocos Creator 生命周期详解
Cocos Creator 生命周期详解 一、前言 Cocos Creator 作为主流的游戏开发引擎,其组件化架构的核心就是 生命周期回调函数 。理解这些回调的触发时机、执行顺序和使用场景,是写出高质量游戏逻辑的基础。 本文基于 Cocos Creator 3.x ,系统梳理从引擎启动到场景切换、从节点创建到销毁的完整生命周期。 二、组件生命周期回调总览 Cocos Creator 的生命周期回调按触发顺序排列如下: | 回调函数 |...
学习
评论
请登录后发表评论
去登录