# Git conventional commit related packages & guides
:::info
**RELATED PACKAGES**
* [Node.js](https://nodejs.org/en/)
* [commitlint](https://commitlint.js.org/#/)
* [husky](https://github.com/typicode/husky)
* [commitizen](https://github.com/commitizen/cz-cli)
* [standard-version](https://github.com/conventional-changelog/standard-version)
:::
`commitlint` helps team adhering to a commit convention. By supporting npm-installed configurations it makes sharing of commit conventions easy.
`@commitlint/cli` is the tool to execute commitlint and `@commitlint/config-conventional` is the regulation based on conventinal commit.
```bash!
npm install -g @commitlint/cli @commitlint/config-conventional
```
After the installation, we need th export the modulet into our project.
```bash!
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
```
`husky` use shell script to automatically check wheather the commit is correct
under conventional commit. it can use hook to set the checkpoint. for example,
check the commit message before commitment.
```bash!
npx husky-init ; npm install
```
add the hook.
```bash!
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
```
```bash!
npx commitizen init cz-conventional-changelog --save-dev --save-exact
```
`commitizen` is a package to create a conventional commit template
```bash!
npx cz
```

automatically update a changelog, it will changed the project version based
on commit type according to semver principle.
[What is semver principle](https://medium.com/fiverr-engineering/major-minor-patch-a5298e2e1798)
type:
feat(new features) : change minor version
fix (bug fix) : change patch version
```json
"release": "npx standard-version",
```
You can add the above command into package.json scirpts dictionary, so that
the below command can be used.

```bash!
npm run release
```
after the release the CHANGELOG.md will be updated and then can push to Github.
