NPM ekotizimi, package.json tuzilishi, dependencies vs devDependencies, asosiy npm buyruqlari, Semantic Versioning (^, ~) hamda node_modules va package-lock.json.
Bu bobda JavaScript ekotizimining eng katta kutubxonalar ombori — NPM (Node Package Manager) bilan ishlashni o'rganamiz.
NPM — boshqa dasturchilar yozgan tayyor kod bo'laklari (kutubxonalar, packagelar)ni topish, o'rnatish va loyihangizda ishlatish imkonini beruvchi vosita.
Har safar oddiy narsalarni (masalan, sanani formatlash, so'rov yuborish) noldan yozish o'rniga, minglab dasturchilar tomonidan allaqachon yozilgan, sinovdan o'tgan kodni ishlatish — vaqtni tejaydi va xatolarni kamaytiradi.
🧰 NPM — bu ulkan asboblar do'koni: har safar bolg'a yasashni o'rganish o'rniga, siz uni do'kondan (NPM'dan) sotib olib (o'rnatib), to'g'ridan-to'g'ri ishlatasiz.
package.json — har qanday Node.js loyihasining markazidagi fayl, u loyiha haqidagi barcha muhim ma'lumotni (nomi, versiyasi, bog'liqliklari) saqlaydi.
data.jsonJSON{"name": "mening-loyiham","version": "1.0.0","description": "Oddiy JavaScript loyihasi","main": "index.js","scripts": {"start": "node index.js","test": "jest"},"dependencies": {"lodash": "^4.17.21"},"devDependencies": {"jest": "^29.0.0"}}
| Maydon | Vazifasi |
|---|---|
name, version | Loyihaning identifikatsiyasi |
scripts | Terminal orqali ishga tushiriladigan buyruqlar (npm run start) |
dependencies | Loyiha ishlashi uchun kerakli kutubxonalar |
devDependencies | Faqat development (ishlab chiqish) uchun kerakli vositalar (masalan, test kutubxonalari) |
| Buyruq | Vazifasi |
|---|---|
npm init | Yangi package.json yaratadi |
npm install <paket> | Paketni o'rnatadi va dependenciesga qo'shadi |
npm install <paket> --save-dev | Paketni devDependenciesga qo'shib o'rnatadi |
npm install | package.jsondagi barcha bog'liqliklarni o'rnatadi |
npm uninstall <paket> | Paketni o'chiradi |
npm run <script> | scriptsdagi buyruqni ishga tushiradi |
terminal.shBashnpm init -y # tezkor package.json yaratishnpm install lodash # lodash kutubxonasini o'rnatishnpm install jest --save-dev # jest'ni faqat dev uchun o'rnatishnpm run start # package.json'dagi "start" scriptini ishga tushirish
Kutubxona versiyalari MAJOR.MINOR.PATCH (masalan, 4.17.21) formatida yoziladi, va har bir raqamning aniq ma'nosi bor — bu Semantic Versioning deb ataladi.
| Qism | Nima o'zgarganda oshadi | Misol |
|---|---|---|
| MAJOR (birinchi) | Katta, moslik buzuvchi o'zgarishlar | 4.x.x → 5.0.0 |
| MINOR (ikkinchi) | Yangi funksiyalar, lekin moslik saqlanadi | 4.17.x → 4.18.0 |
| PATCH (uchinchi) | Faqat xato tuzatishlar | 4.17.21 → 4.17.22 |
data.jsonJSON{"dependencies": {"lodash": "^4.17.21","express": "~4.18.0","react": "18.2.0"}}
| Belgi | Ma'nosi | Misol qamrovi |
|---|---|---|
^4.17.21 | MINOR va PATCH yangilanishlarga ruxsat | 4.17.21 dan 4.x.xgacha (5.0.0gacha emas) |
~4.18.0 | Faqat PATCH yangilanishlarga ruxsat | 4.18.0 dan 4.18.xgacha |
4.17.21 | Aniq, faqat shu versiya | Faqat 4.17.21 |
^ (caret) — eng ko'p ishlatiladigan belgi, u kichik yangilanishlarni avtomatik qabul qiladi, lekin katta ("moslik buzuvchi") o'zgarishlarni oldini oladi.
⚠️ Common Mistake
^ yoki ~ belgilarisiz, aniq versiyani "qotirib qo'yish" ("lodash": "4.17.21") — xavfsizlik yangilanishlari (patch)ni ham avtomatik olishni to'xtatadi. Ko'p hollarda, ^ bilan qoldirish tavsiya etiladi.
node_modules — barcha o'rnatilgan paketlarning haqiqiy kodi saqlanadigan papka.package-lock.json — o'rnatilgan paketlarning aniq versiyalarini "qulflab" qo'yuvchi fayl, bu boshqa kompyuterda loyiha aynan bir xil versiyalar bilan ishlashini kafolatlaydi.🔒 package.jsondagi ^4.17.21 — "4-versiya oilasidan istalgani" degani, package-lock.json esa — "aynan 4.17.21, nuqtama-nuqta" deb "qulflab qo'yadi", shunda barcha dasturchilar (va serverlar) bir xil versiyalar bilan ishlaydi.
🔥 Important
node_modules papkasi — odatda juda katta (yuzlab MB) bo'ladi va hech qachon loyihaning versiya nazorati tizimiga (Git) qo'shilmaydi. package-lock.json esa — har doim qo'shilishi kerak, chunki u versiyalarning izchilligini ta'minlaydi.
terminal.shBashnpm install lodash
script.jsJavaScript// CommonJSconst _ = require("lodash");console.log(_.capitalize("salom")); // "Salom"// ES Modulesimport _ from "lodash";console.log(_.capitalize("salom")); // "Salom"
🔗 Connection
Bu — Chapter 38 (Modules) va Chapter 48 (Node.js)da o'rgangan import/require bilimlarining, tashqi (o'zingiz yozmagan) kutubxonalar bilan qo'llanilishi.
Task:
Yangi package.json fayli qanday yaratilishini (npm init -y) va uning asosiy maydonlarini (name, version, scripts) tasvirlab bering.
Required Concepts:
package.json asoslariTask:
"^2.5.0", "~2.5.0", "2.5.0" — bu uchta versiya belgisi bir xil kutubxona uchun ishlatilganda, ular qaysi versiyalarni avtomatik qabul qilishini (masalan, 2.5.1, 2.6.0, 3.0.0 kelib chiqqanda) jadval shaklida tushuntiring.
Required Concepts:
Task:
Oddiy package.json yozing: loyiha nomi "todo-app", versiyasi "1.0.0", dependenciesda "date-fns": "^2.30.0", devDependenciesda "jest": "^29.0.0", va scriptsda "start" ("node index.js") va "test" ("jest") buyruqlari bo'lsin.
Required Concepts:
package.json tuzilishiQuyidagi package.json qismi berilgan:
data.jsonJSON{"dependencies": {"some-lib": "^1.4.2"}}
Ushbu loyiha npm install qilinganda, quyidagi versiyalardan qaysi biri avtomatik o'rnatilishi mumkin: 1.4.5, 1.5.0, 2.0.0?
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> 1.4.5 va 1.5.0 — mumkin. 2.0.0 — mumkin emas.Why?
^1.4.2 — MAJOR versiya (1) o'zgarmasligi sharti bilan, MINOR va PATCH yangilanishlarga ruxsat beradi. 1.4.5 (PATCH oshgan) va 1.5.0 (MINOR oshgan) — ikkalasi ham 1.x.x oilasida qoladi. 2.0.0 — MAJOR versiya o'zgargani uchun, ^ belgisi bunga ruxsat bermaydi.
Dasturchi loyihasini boshqa kompyuterga ko'chirdi, npm install qildi, lekin dastur boshqacha ishlay boshladi — kutubxonaning yangi, "moslik buzuvchi" versiyasi o'rnatilib qolgan edi.
data.jsonJSON{"dependencies": {"some-lib": "^1.4.2"}}
Your Task:
Yechim: package-lock.json faylini har doim loyiha bilan birga (Git orqali) saqlash va ko'chirish kerak — bu fayl aniq o'rnatilgan versiyalarni "qulflab" qo'yadi, shuning uchun barcha kompyuterlarda bir xil versiyalar o'rnatiladi.
</details>package.json — loyiha haqidagi barcha muhim ma'lumotni saqlaydi.^ va ~ belgilari — avtomatik yangilanishlarning qamrovini belgilaydi.package-lock.json — barcha muhitlarda bir xil versiyalarni kafolatlaydi.dependencies — dastur uchun zarur, devDependencies — faqat ishlab chiqish uchun.^ — eng keng tarqalgan versiya belgisi, kichik yangilanishlarga ruxsat beradi.node_modules — Git'ga qo'shilmaydi, package-lock.json — albatta qo'shiladi.npm run <script> — package.jsondagi buyruqlarni qulay ishga tushirish usuli.terminal.shBashnpm init -ynpm install <paket>npm install <paket> --save-devnpm installnpm uninstall <paket>npm run <script-nomi>
data.jsonJSON{"dependencies": { "lib": "^1.0.0" },"devDependencies": { "test-lib": "^2.0.0" },"scripts": { "start": "node index.js" }}
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: