Bài viết này sẽ giúp bạn hiểu rõ Husky là gì, tầm quan trọng của Husky trong dự án, và cách triển khai nó một cách hiệu quả với Typescript.
1. Git Hooks là gì?
Trước khi đi vào tìm hiểu về Husky, bạn cần hiểu Git Hooks là gì. Git Hooks là các đoạn mã hoặc script tự động được kích hoạt bởi một số hành động trong quy trình Git. Các tập lệnh này thường được sử dụng để kiểm tra cú pháp, kiểm tra mã tự động, hoặc thực hiện các thao tác trước và sau các hành động như commit hoặc push.
Ví dụ: Để đảm bảo tất cả các commit đều tuân thủ tiêu chuẩn của dự án, bạn có thể sử dụng Git Hooks để tự động chạy kiểm tra mã trước khi commit, sử dụng công cụ như ESLint (kiểm tra chất lượng code JavaScript/TypeScript) và Prettier (kiểm tra định dạng mã) trước khi commit.
Các Git Hooks phổ biến bao gồm:
- pre-commit: chạy trước khi commit code.
- commit-msg: chạy sau khi nhập message commit.
- pre-push: chạy trước khi đẩy (push) code lên kho lưu trữ.
- post-merge: chạy sau khi merge code.
Mỗi loại Git Hook có vai trò và ứng dụng cụ thể, đảm bảo chất lượng và quy chuẩn mã nguồn.
2. Husky là gì?
Husky là một thư viện JavaScript mã nguồn mở giúp bạn dễ dàng quản lý các Git Hooks trong dự án của mình. Nó cho phép bạn thiết lập và quản lý các hook như pre-commit
, pre-push
, và post-commit
thông qua file cấu hình, thay vì phải thao tác thủ công trong thư mục .git/hooks
.
3. Vì sao nên sử dụng Husky?
3.1 Tự động hóa Git Hooks dễ dàng
Husky giúp đơn giản hóa việc cấu hình và quản lý các Git Hooks, từ đó tiết kiệm thời gian cho các developer. Bạn chỉ cần cài đặt và cấu hình Husky một lần trong dự án, các hooks như kiểm tra mã (linting) sẽ tự động chạy mỗi khi commit mà không cần thiết lập thủ công từng hook.
3.2 Cải thiện chất lượng Code tự động
Việc giữ cho code "clean" và đồng nhất là một phần quan trọng của quy trình phát triển phần mềm (SDLC). Husky giúp tự động kiểm tra mã (linter) trước khi commit, giúp đảm bảo chất lượng code ngay từ ban đầu.
Ví dụ: Khi commit, Husky tự động chạy ESLint và Prettier để đảm bảo code không có lỗi cú pháp và được định dạng chuẩn trước khi đưa vào repository.
3.3 Đảm bảo tuân thủ quy trình phát triển
Như mình đã đề cập đến ở trên, Git Hooks giúp đảm bảo các quy trình phát triển phần mềm được tất cả developer trong dự án tuân thủ, Husky hỗ trợ tự động hóa các quy trình này.
Ví dụ: Mỗi lần push
, Husky sẽ tự động kiểm tra code hoặc chạy unit test, giúp ngăn ngừa việc đưa code không đạt chuẩn vào repository.
4. Hướng dẫn cấu hình Husky trong dự án Typescript
Với một vài bước đơn giản sau là bạn có thể tích hợp Husky vào dự án:
- Bước 1: Khởi tạo dự án
npm init -y
- Bước 2: Cài đặt Husky
npm install husky --save-dev
- Bước 3: Cấu hình Husky
Sau khi cài đặt, bạn cần cấu hình Husky trong file package.json
hoặc sử dụng lệnh npx husky install
để tạo file cấu hình .husky
cùng với file .gitignore
. Mình sẽ sử dụng cách đơn giản trong package.json
nhé
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
Cấu hình Husky như trên để chạy các bài kiểm tra trước khi commit và kiểm tra format của commit message.
- Đối với
"pre-commit": "npm test"
: mỗi khi bạn thực hiện commit sẽ chạy lệnhnpm test
nếu có bất kỳ test nào fail, thì quá trình commit sẽ bị chặn. - Đối với
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
:commitlint
sẽ kiểm tra thông điệp commit của bạn, phải tuân thủ theo chuẩn Conventional Commits.
- Khắc phục điều này, đây là một ví dụ thành công:
feat: add new user authentication module
.
Ngoài ra, nếu như bạn muốn bỏ qua trong trường hợp cần thiết, bạn có thể dùng lệnh sau khi chạy commit:
git commit -m "message" --no-verify
5. Lưu ý khi sử dụng Husky
- Không nên làm dụng Git Hooks: dù Husky rất hữu ích, bạn không nên lạm dụng quá nhiều Git Hooks, vì chúng có thể làm chậm quá trình commit hoặc push, đặc biệt là trong dự án lớn, có nhiều kiểm tra phức tạp.
- Nên đồng bộ cấu hình giữa các thành viên nếu bạn làm việc team: bạn có thể được thực hiện bằng cách sử dụng Docker.
- Nên chạy kiểm tra trên các phần mã thay đổi để tối ưu hoá hiệu suất, tránh làm chậm quy trình.
6. Kết luận
Husky giúp đảm bảo rằng mọi commit và push đều tuân thủ các tiêu chuẩn chất lượng đã đề ra. Nhờ đó, các developer có thể giảm thiểu lỗi, duy trì chất lượng code đồng nhất, và bảo vệ dự án khỏi những vấn đề tiềm ẩn, nâng cao hiệu quả làm việc và sự ổn định của mã nguồn trong suốt vòng đời phát triển.
Hy vọng sau bài viết này, bạn đã có cái nhìn rõ hơn về Husky cũng như cách sử dụng nó trong các dự án một cách hiệu quả.
Một số bài viết có thể bạn sẽ quan tâm tại 200Lab:
Tran Thuy Vy
Mình sẽ không chết vì những điều mình không biết, nhưng sẽ chết vì những điều mình tưởng rằng mình biết
follow me :
Bài viết liên quan
Remix là gì? Framework Full-Stack cho Web Developer
Oct 03, 2024 • 7 min read
Full bộ source code: Simple Task Microservices
Oct 02, 2024 • 1 min read
Microservices là gì? So sánh Microservices và Monolithic
Sep 30, 2024 • 10 min read
Fluentd là gì? So sánh Fluentd và Logstash
Sep 29, 2024 • 11 min read
Expressjs là gì? Framework phổ biến nhất cho Node.js
Sep 28, 2024 • 9 min read
Nginx là gì? Web Server đa năng cho các Hệ thống lớn
Sep 27, 2024 • 11 min read