What is husky?
Husky is an npm package that allows you to manage Git hooks easily. It lets you run scripts at specific points in your Git workflow, such as before committing or pushing code. This helps in automating tasks like code linting, testing, and validation before these actions take place, ensuring code quality and consistency.
What are husky's main functionalities?
Pre-commit Hook
This feature allows you to run commands before a commit is made. In this example, `npm test` and `npm run lint` are executed before each commit, ensuring that tests pass and the code is linted.
"husky": {
"hooks": {
"pre-commit": "npm test && npm run lint"
}
}
Pre-push Hook
This feature allows you to run commands before code is pushed to the repository. In this example, `npm run build` is executed before each push, ensuring that the build is updated.
"husky": {
"hooks": {
"pre-push": "npm run build"
}
}
Commit-msg Hook
This feature allows you to run a script to validate the commit message. In this example, `validate-commit-msg.js` is a script that checks if the commit message follows a certain format.
"husky": {
"hooks": {
"commit-msg": "./validate-commit-msg.js"
}
}
Other packages similar to husky
lint-staged
Lint-staged is similar to Husky in that it is often used in conjunction with Husky to run linters on staged files in Git. It does not manage Git hooks itself but is designed to run scripts on files that are staged for commit.
pre-commit
Pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. It is similar to Husky but is language-agnostic and can be used outside of the Node.js ecosystem. It requires a separate installation and configuration.
husky
Git hooks made easy
Husky can prevent bad git commit
, git push
and more :dog: woof!
Install
npm install husky@next --save-dev
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test",
"...": "..."
}
}
}
git commit -m 'Keep calm and commit'
By default, husky expects your project's package.json
and your .git
directory to be at the same level. It can be configured to support monorepos or sub-directories.
Check documentation for more.
Uninstall
npm uninstall husky
Upgrading from 0.14
If you're upgrading from 0.14
, simply move your hooks to husky.hooks
:
{
"scripts": {
- "precommit": "npm test"
},
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm test"
+ }
+ }
}
Or run the following command which will do the same automatically for you ;)
./node_modules/.bin/husky-upgrade
Alternatively, you can also use any of the files/formats that are supported by cosmiconfig. This means that you can place your husky hooks config in a .huskyrc
file or export them from a husky.config.js
file as well. Cosmiconfig supports js
, json
, and yaml
file formats.
Features
- Keeps existing user hooks
- Supports GUI Git clients
- Supports all Git hooks (
pre-commit
, pre-push
, ...) - Auto-migrates Git hooks installed by
ghooks
Used by
See also
License
MIT - Typicode :cactus: - Patreon