What is commitlint?
commitlint is an npm package used to enforce conventional commit messages. It helps teams maintain a consistent commit history by validating commit messages against a set of rules.
What are commitlint's main functionalities?
Basic Configuration
This feature allows you to set up commitlint with a basic configuration that extends the conventional commit rules. This ensures that your commit messages follow a standard format.
{
"extends": ["@commitlint/config-conventional"]
}
Custom Rules
You can define custom rules for commit messages. In this example, the 'type-enum' rule enforces that the commit type must be one of the specified values, and the 'subject-case' rule ensures that the commit message subject is not in sentence case.
{
"rules": {
"type-enum": [2, "always", ["feat", "fix", "docs", "style", "refactor", "test", "chore"]],
"subject-case": [2, "never", ["sentence-case"]]
}
}
Linting Commit Messages
This command lints the commit message that is being edited. It is typically used in a Git hook to automatically validate commit messages before they are finalized.
npx commitlint --edit $1
Integrating with Husky
commitlint can be integrated with Husky to automatically run commit message linting as a Git hook. This ensures that all commit messages are validated before they are committed.
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
Other packages similar to commitlint
cz-customizable
cz-customizable is a package that provides a customizable commitizen adapter. It helps in creating consistent commit messages by providing a guided commit message prompt. Unlike commitlint, which validates commit messages after they are written, cz-customizable helps in writing them correctly in the first place.
commitizen
commitizen is a tool that helps you write commit messages following the conventional commit format. It provides an interactive CLI to guide you through the commit message creation process. While commitlint focuses on validating commit messages, commitizen focuses on creating them.
semantic-release
semantic-release automates the versioning and package publishing process based on the commit messages. It uses commit message conventions to determine the type of release (major, minor, patch). While commitlint ensures commit message consistency, semantic-release uses those messages to automate releases.