หายกังวลเรื่อง linter ด้วย Husky🐶 (node.js)
ในระบบการทำงานแบบ Agile นั้น ปฎิเสธไม่ได้เลยว่าเราจำเป็นต้องใช้เครื่องมือและหนทางทุกอย่างเพื่อหลีกเลี่ยงการทำงานที่ไม่ efficient และป้องกันความผิดพลาดอันไม่พึงประสงค์ ดังนั้น linting และ unit test เป็นสิ่งสำคัญที่จะช่วยเราตรวจสอบและจัดโค้ดของเราให้อยู่ใน format เดียวกันกับทุกคนในทีม/โปรเจค นั้นๆ เพราะบางครั้ง human error จาก developer ก็สามารถเกิดขึ้นได้ งานเร่งหรือปัจจัยภายนอกอื่นอาจทำให้ devs ลืมเรื่องเล็กๆ น้อยๆ เหล่านี้
วิธีที่เราจะไม่ลืมโดยที่ไม่ให้ git action หรือ CI/CD บน Git เตือน error, lint หรือ build failed คือตั้งค่าโปรเจคให้ run lint และ unit test ก่อนที่จะ git commit
โดย git มี feature pre-commit, pre-push etc… ไว้ให้เราสามารถ config ได้ตามที่ทีมต้องการ
🔸 husky installing🔸
Repo ของเจ้าหมาน้อย Husky ขายไว้ว่า 💸
Modern native Git hooks made easy
Husky improves your commits and more 🐶 woof!
เริ่มกันเลย
ทำการติดตั้ง husky ใน project ของเรา
(1) Install:
npm install —-save-dev husky
(2) config เพิ่มใน `package.json` เพื่อให้ pre-commit ทำงาน:
{
...
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
}
...
}
(3) ทดสอบแก้ไฟล์และ commit เพื่อ trigger husky
(4) เป็นอันเสร็จสิ้น พิธีกรรมการติดตั้ง! ง่ายมากเสียพลังงานไปไม่ถึง 1 cal
หลังจากนี้เมื่อสั่ง commit ด้วย git commitตัว
npm run lint ก็จะทำงานทันที หมดกังวลเรื่องลืมเช็ค lint ด้วยน้องหมา husky
*แต่ก็ต้องระวังหากทีมใช้ tools อื่นในการ commit ที่ไม่ใช่ command git commit
###(5) ในกรณีที่ตัว husky ไม่ทำงานตามที่ config pre-commit หรือ hook อื่นๆได้ ให้ทำตามขั้นตอนดังนี้ เพื่อบังคับให้ lib ทำ correction จาก latest version
npm uninstall husky
npm install -D husky@4
npm install -D husky
สรุปข้อดีของการใช้ husky บังคับให้รัน Linter
✅ Prevent Errors:
ปกป้องและป้องกันภัยอันตรายจากข้อผิดพลาดทั่วไปของคนเขียนโค้ด
✅ Maintainability:
บังคับให้ code เป็น format เดียวกันรวมถึง naming เพื่อสร้าง readable code ที่ดีในการ maintain project ต่อ
❌ Unsuitable rules:
กฎของ linter จำเป็นต้อง config ให้เหมาะสมกับตัวโปรเจคเป็นหลัก อาจไม่รองรับสไตล์การโค้ดของทุกคนในโปรเจคได้ 😅