npm package: @startdt/commitlint-config
Description: Commitlint 可共享配置
Author: Vultur
Latest version: 2.8.0

# @startdt/commitlint-config [![dependencies](https://img.shields.io/david/startdt/next-spec?path=packages%2Fcommitlint-config)](https://david-dm.org/startdt/next-spec?path=packages/commitlint-config)

[![open source](https://img.shields.io/badge/open%20source-❤-red)](https://next.startdt.com)
[![npm version](https://img.shields.io/npm/v/@startdt/commitlint-config)](https://www.npmjs.com/package/@startdt/commitlint-config)
[![node version](https://img.shields.io/node/v/@startdt/commitlint-config)](https://nodejs.org/zh-cn/)
[![npm peer dependency version](https://img.shields.io/npm/dependency-version/@startdt/commitlint-config/peer/@commitlint/cli)](https://commitlint.js.org)
[![npm download](https://img.shields.io/npm/dm/@startdt/commitlint-config)](https://www.npmjs.com/package/@startdt/commitlint-config)
[![npm license](https://img.shields.io/npm/l/@startdt/commitlint-config)](https://www.npmjs.com/package/@startdt/commitlint-config)

## 如何使用

```bash
npm i @commitlint/cli @startdt/commitlint-config --save-dev
```

> 提示：如果你已经全局安装了 `Commitizen` 依赖，则可以通过命令行快速创建遵循约定的提交。请参看：[使用 CLI 规范提交信息](#CLI-命令行工具)

使用配置文件：

```js
// .commitlintrc.js
module.exports = {
    extends: '@startdt/commitlint-config',
    formatter: '@startdt/commitlint-config/format',
    rules: {
        // 自定义规则
    },
};
```

或者项目属性：

```json
// package.json
"commitlint": {
    "extends": "@startdt/commitlint-config",
    "formatter": "@startdt/commitlint-config/format",
    "rules": {}
}
```

最后，在 `package.json` 中添加 `commit-msg` 钩子：

```json
"gitHooks": {
    "commit-msg": "commitlint -e"
},
```

执行 `git commit` 时，自动校验 commit message 是否符合提交约定，并给出相应的提示。

## CLI 命令行工具

如果你已经全局安装了 `Commitizen` 依赖，则可以通过命令行快速创建遵循约定的提交。

在 `package.json` 中配置 `commitizen` 选项：

```json
// package.json
"config": {
    "commitizen": {
        "path": "./node_modules/@startdt/commitlint-config"
    }
},
```

使用 `git cz` 替代 `git commit` 提交代码，即可通过交互式 CLI 快速创建遵循约定的提交。

如果你还没有安装 `git cz` 相关的依赖，我们提供了内置的 CLI 工具，可以在项目中使用 `npm script` 的方式调用：

```json
// package.json
{
    "scripts": {
        "commit": "git-commit"
    }
}
```

执行 `npm run commit` 提交代码，即可通过交互式 CLI 快速创建遵循约定的提交。

## 提交指南

在 `git commit` 时提交信息遵循以下格式：

```bash
<type 类型>[optional scope 可选的作用域]: <description 描述>

[optional body 可选的正文]

[optional footer 可选的脚注]
```

### Header

#### type【必填】

用于说明 `commit` 的类型，只允许使用下面列举的标识：

- `init`: 初次提交代码
- `feat`：新增功能特性
- `fix`： 修复已知问题
- `style`: 统一代码风格
- `chore`: 更新非核心代码
- `build`: 添加或更新构建
- `test`: 添加或改进测试
- `docs`: 添加或更新文档
- `lang`: 国际化与本地化
- `revert`: 撤销之前的提交
- `refactor`: 重构现有代码
- `example`：更新示例代码
- `release`: 发布版本标签

#### scope【可选】

用于说明 `commit` 影响的范围，比如数据层、控制层、视图层等，视项目不同而不同。

如果你的修改影响了不止一个 scope，你可以使用 `*` 代替。

#### subject【必填】

subject 是 `commit` 目的的简短描述（默认最大长度不超过 72 个字符）。

**注意事项：**

- 以动词开头，使用第一人称现在时，比如 change，而不是 changed 或 changes
- 英文统一使用小写体
- 结尾不加句号（`.`）

### Body【可选】

Body 部分是对本次 `commit` 的详细描述，默认可选。

**注意事项：**

- 较长内容无需手动换行
- 本次提交含有 **非兼容性** 更新时，必填填写详细说明
- 应该说明代码变更的动机，以及与之前行为的对比

### Footer【可选】

Footer 部分只用于以下两种情况：

- 非兼容性更新

  如果当前代码与上一个版本不兼容，则 Footer 部分以 `BREAKING CHANGE` 开头，后面是对变动的描述、以及变动理由和迁移方法。

- 关闭 issue

  如果当前 `commit` 针对某个 issue ，那么可以在 Footer 部分关闭这个 issue 。