Jacky's blog Jacky's blog
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Jacky Wang

行到水穷处,坐看云起时
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node

  • VSCode插件

  • Webpack

  • Redux

  • React源码

  • 组件库

  • React高阶系列

  • UMI插件

  • 前端工程化

    • NPM 发布-检测产物脚本
    • 代码规范:集成 commit-msg 功能
      • 0. 前言
      • 1. 步骤清单
      • 2. 说明
  • 单元测试vitest

  • 重点技术
  • 前端工程化
wangjiasheng
2023-03-13
目录

代码规范:集成 commit-msg 功能

# 0. 前言

在本节来集成对 commit message 提交信息的规范工具链。

# 1. 步骤清单

  1. 安装 哈士奇: pnpm i husky -D

  2. 使用 husky v8 初始化方案:npx husky install

  3. 添加 bash 脚本钩子: 可选操作如下:

    • npx husky add .husky/pre-commit "xxxxx":提交代码前做一些事
    • npx husky add .husky/pre-push "xxxxx": 推代码前做一些事
    • npx husky add .husky/pre-merge "xxxxx": 合并代码前做一些事
    • npx husky add .husky/pre-rebase "xxxxx": rebase 前做一些事
    • npx husky add .husky/commit-msg "xxxxx" : 校验 commit message

    当执行完指令后,会对应生成 .husky 文件夹,修改 commit-msg 脚本:

    #!/usr/bin/env sh
    . "$(dirname -- "$0")/_/husky.sh"
    
    env HUSKY_GIT_PARAMS=$1 node ./scripts/verifyCommit.mjs
    
    1
    2
    3
    4
  4. 拷贝 verifyCommit.mjs 文件

    安装依赖:

     pnpm i chalk -D
     pnpm i os-locale
    
    1
    2

    verfiyCommit.mjs 脚本如下:

    import chalk from "chalk"; // 最新版 chalk 包为 module 规范
    import { osLocale } from "os-locale"; // 最新版 os-locale 包为 module 规范
    import { readFileSync } from "fs";
    
    /* 获取路径地址:.git/COMMIT_EDITMSG */
    const msgPath = process.env.HUSKY_GIT_PARAMS;
    
    const msg = readFileSync(msgPath, "utf-8").trim();
    
    const commitRE =
      /^(((\ud83c[\udf00-\udfff])|(\ud83d[\udc00-\ude4f\ude80-\udeff])|[\u2600-\u2B55]) )?(revert: )?(feat|fix|docs|UI|refactor|perf|workflow|build|CI|typos|chore|tests|types|wip|release|dep|locale)(\(.+\))?: .{1,50}/;
    
    if (!commitRE.test(msg)) {
      console.log();
      osLocale().then(locale => {
        if (locale === "zh-CN") {
          console.error(
            `  ${chalk.bgRed.white(" ERROR ")} ${chalk.red(
              `提交日志不符合规范`,
            )}\n\n${chalk.red(
              `  合法的提交日志格式如下(emoji 和 模块可选填):\n\n`,
            )}    
            ${chalk.green(`[<emoji>] [revert: ?]<type>[(scope)?]: <message>\n`)}
            ${chalk.green(`💥 feat: 添加了个很棒的功能`)}
            ${chalk.green(`🐛 fix: 修复了一些 bug`)}
            ${chalk.green(`📝 docs: 更新了一下文档`)}
            ${chalk.green(`🌷 UI: 修改了一下样式`)}
            ${chalk.green(`🏰 chore: 对脚手架做了些更改`)}
            ${chalk.green(`🌐 locale: 为国际化做了微小的贡献\n`)}
            ${chalk.green(
              `其他提交类型: refactor, perf, workflow, build, CI, typos, tests, types, wip, release, dep\n`,
            )}
            ${chalk.red(
              `See https://github.com/vuejs/core/blob/main/.github/commit-convention.md\n`,
            )}`,
          );
        } else {
          console.error(
            `  ${chalk.bgRed.white(" ERROR ")} ${chalk.red(
              `invalid commit message format.`,
            )}\n\n${chalk.red(
              `  Proper commit message format is required for automated changelog generation. Examples:\n\n`,
            )}    
            ${chalk.green(`[<emoji>] [revert: ?]<type>[(scope)?]: <message>\n`)}
            ${chalk.green(`💥 feat(compiler): add 'comments' option`)}
            ${chalk.green(`🐛 fix(compiler): fix some bug`)}
            ${chalk.green(`📝 docs(compiler): add some docs`)}
            ${chalk.green(`🌷 UI(compiler): better styles`)}
            ${chalk.green(
              `🏰 chore(compiler) : Made some changes to the scaffolding`,
            )}
            ${chalk.green(
              `🌐 locale(compiler): Made a small contribution to internationalization\n`,
            )}
            ${chalk.green(
              `Other commit types: refactor, perf, workflow, build, CI, typos, tests, types, wip, release, dep\n`,
            )}
            ${chalk.red(
              `See https://github.com/vuejs/core/blob/main/.github/commit-convention.md\n`,
            )}`,
          );
        }
    
        process.exit(1);
      });
    }
    
    export default () => {};
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
  5. 添加 pacakge.json 文件

    "scripts": {
      "prepare": "husky install",
    },
    /* 设置当前工程 ESM 格式*/
    "type": "module",
    
    1
    2
    3
    4
    5

# 2. 说明

  • verfiyCommit.mjs 这个脚本来源于 umi.js/fabric 这个包,而这个包又来源于 vue 文件。

    这里没有使用 commitlint 社区解决方案,因为这种写法自由度较高,整体也比较好控制。

  • 传统 commitlint 方案:

    1. 安装依赖:

      pnpm i commitlint @commitlint/cli @commitlint/config-conventional -D
      
      1
    2. 创建 .commitlintrc.cjs ,内容如下:

      module.exports = {
        extends: ['@commitlint/config-conventional']
      }
      
      1
      2
      3
    3. 对应的 bash 脚本,如下:

      npx husky add .husky/commit-msg "npx --no-install commitlint --edit \"$1\""
      
      1
编辑 (opens new window)
上次更新: 2023/03/18, 13:03:00
NPM 发布-检测产物脚本
vitest 测试框架环境搭建

← NPM 发布-检测产物脚本 vitest 测试框架环境搭建→

最近更新
01
如何理解浏览器的 user agent 用户代理的含义?
11-05
02
浏览器事件循环机制
10-31
03
浏览器页面渲染机制【2023】
10-15
更多文章>
Theme by Vdoing | Copyright © 2020-2023
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式