# Husky

<figure><img src="https://2732173407-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FT4YO4oylbhJSf6A9M9vf%2Fuploads%2FATpgD8FPEhLfvzmMXHjq%2Fstart%20(5).svg?alt=media&#x26;token=6833af27-ab1c-4b3e-a955-36f6dbc97cb4" alt=""><figcaption></figcaption></figure>

FIAS loyihasi `Husky` yordamida Git hooklarni boshqaradi. Bu sizning kodingizni **commit** yoki **push** qilishdan oldin avtomatik tekshiruvlardan o‘tkazishga yordam beradi — bu esa xatoliklar, formatlash muammolari yoki yaroqsiz build’lar oldini oladi.

***

### ✨ Nima uchun Husky?

* ❌ Formatlanmagan yoki xatoliklar bilan to‘ldirilgan kodni commit qilishga yo‘l qo‘ymaydi.
* ✅ Pushdan oldin kod to‘liq build bo‘lishini tekshiradi.
* ⚡ Team tomonidan qoidalar buzilmasdan ishlashiga kafolat beradi.

***

### 🗂️ Strukturasi

```bash
.husky/
├── _
├── pre-commit
└── pre-push
```

***

### 🧩 Git Hooks

#### 🔒 `pre-commit`

Bu hook `commit` qilishdan oldin faollashadi va `lint-staged` orqali quyidagi ishlarni bajaradi:

```bash
npx lint-staged
```

#### ✨ Nima bo‘ladi?

* Faqat `git add` qilingan fayllar tekshiriladi.
* `prettier` va `eslint` orqali avtomatik tuzatiladi.
* Agar xatolik bo‘lsa, commit to‘xtatiladi.

**`pre-commit` fayli:**

```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged
```

***

#### 🚀 `pre-push`

Bu hook `git push` bajarilishidan oldin faollashadi va `npm run build` ni ishga tushiradi. Maqsad — loyihani `production`ga push qilishdan oldin kompilyatsiyadan muvaffaqiyatli o‘tganini tekshirish.

```bash
npm run build
```

#### ✨ Nima bo‘ladi?

* Build jarayoni muvaffaqiyatli yakunlansa, push amalga oshadi.
* Agar build muvaffaqiyatsiz bo‘lsa, push bekor qilinadi.

**`pre-push` fayli:**

```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run build
```

***

### 🛠️ Husky o‘rnatilishi

```bash
npm install husky --save-dev
npx husky install
```

`package.json`ga quyidagicha qo‘shiladi:

```json
"scripts": {
  "prepare": "husky install"
}
```

Keyin Git hooklarni qo‘shamiz:

```bash
npx husky add .husky/pre-commit "npx lint-staged"
npx husky add .husky/pre-push "npm run build"
```

***

### ✅ Xulosa

| Hook         | Amalga oshiriladi                      | Maqsad                                  |
| ------------ | -------------------------------------- | --------------------------------------- |
| `pre-commit` | `lint-staged` orqali prettier + eslint | Kodingiz toza va izchil bo‘lishi        |
| `pre-push`   | `npm run build`                        | Yaroqsiz build’larning push bo‘lmasligi |
