5.2-bob: npm, package.json, dependencies, scripts, semver
5-QISM — Node.js Backend · 2-mavzu
1. Kirish va motivatsiya
Node.js'ning ishlash mexanizmini 5.1-bob bildik. Endi uning ekotizimini — Node'ni dunyodagi eng katta dasturlash platformasiga aylantirgan narsani — npmni chuqur o'rganamiz. 0.7-bobda npm'ni qisqacha ko'rgandik; endi uni professional darajada, har detali bilan ochamiz.
npm (Node Package Manager) — dunyodagi eng katta dasturlash kutubxonalari ombori (millionlab paket). U tufayli siz "g'ildirakni qaytadan ixtiro qilmaysiz" (0.6, 0.7): sana formatlash, server, validatsiya, autentifikatsiya — bularning hammasini minglab dasturchi yozib, sinab, sayqal bergan; siz bir buyruq bilan olasiz. Lekin bu kuchning mas'uliyati ham bor: dependency'larni boshqarish, versiyalarni tushunish, xavfsizlik.
package.json — har bir Node va frontend (React, Next) loyihaning yuragi. Uni chuqur tushunmasdan, "nega loyiham buzildi?", "nega versiya mos kelmadi?", "qaysi paket xavfli?" degan savollar bilan kurashasiz. Bu bob — butun ekotizimni boshqarish bilimi.
O'xshatish: npm — dasturchilar uchun ulkan omborxona + yetkazib berish xizmati.
package.json— loyihangning "buyurtma ro'yxati va pasporti": qaysi qismlar (paketlar), qaysi versiyada, qanday yig'iladi.npm install— buyurtmani yetkazib beradi. Yaxshi quruvchi omborni ham, buyurtmani ham yaxshi boshqaradi.
Nega muhim?
- Har loyiha — npm bilan boshlanadi (
npm init— 0.7); minglab paket. - Dependency boshqaruvi — versiya muammolari, xavfsizlik (14) — real ish.
- semver — "nega yangilanish kodimni buzdi?" javobi.
- scripts — loyihani ishga tushirish/build/test (10.5: CI/CD ham shu).
2. Nazariya — chuqur tushuntirish
2.1. npm nima — uch ma'no
"npm" uch narsani anglatadi (chalkashmaslik uchun):
- CLI vositasi — terminalingda (
npm install,npm run— 0.3). - Registry (ombor) — registry.npmjs.org — millionlab paket saqlanadigan bulut.
- Kompaniya/sayt — npmjs.com (paketlarni qidirish).
Node bilan birga keladi 0.7-bob. Muqobillar: yarn, pnpm (tezroq, samaraliroq) — lekin npm — standart va eng keng tarqalgan.
2.2. package.json — loyiha pasporti (har maydon)
package.json — loyiha haqidagi barcha ma'lumot (JSON — 2.8). To'liq misol va har maydon izohi:
{
"name": "mening-loyiham", // loyiha nomi (majburiy, kichik harf)
"version": "1.0.0", // versiya (majburiy, semver — 2.6)
"description": "Backend API", // qisqa tavsif
"main": "index.js", // kirish nuqtasi (asosiy fayl)
"type": "module", // "module" (ESM) yoki "commonjs" (2.14)
"scripts": { // nomlangan buyruqlar (2.7)
"start": "node index.js",
"dev": "node --watch index.js",
"test": "jest"
},
"dependencies": { // ISHLASH uchun kerak (2.4)
"express": "^4.19.2"
},
"devDependencies": { // faqat ISHLAB CHIQISHDA (2.4)
"nodemon": "^3.1.0",
"jest": "^29.7.0"
},
"engines": { // qaysi Node versiyasi (2.10)
"node": ">=18"
},
"keywords": ["api", "backend"], // qidiruv uchun (nashr qilinsa)
"author": "Ali Valiyev",
"license": "MIT" // litsenziya (2.11)
}2.3. package.json yaratish
npm init # savollar bilan (interaktiv)
npm init -y # barchasiga default — tez (0.7)
npm init -y && npm pkg set type="module" # ESM bilan (2.14)2.4. Dependencies vs devDependencies — muhim farq
Ikki asosiy dependency turi:
dependencies— ilova ishlashi uchun kerak (production'da ham): Express, Mongoose, Axios. Foydalanuvchi ishlatadigan kod.devDependencies— faqat ishlab chiqishda kerak (production'da emas): nodemon 5.1-bob, Jest (test — 8.11), ESLint 15.3-bob, TypeScript (7).
Uchinchi tur — peerDependencies (asosan kutubxona/plugin yozayotganda): paketingiz qaysi versiyadagi "mezbon" paketga muhtojligini bildiradi, lekin uni o'zi o'rnatmaydi — buni foydalanuvchi loyihasi ta'minlaydi. Masalan React plugin'i "peerDependencies": { "react": ">=18" } deb yozadi: React'ni o'zi ikkilantirib o'rnatmaydi, foydalanuvchi loyihasidagi React'dan foydalanadi (bitta nusxa — chalkashlik bo'lmaydi). Oddiy ilova (kutubxona emas) yozsangiz, buni odatda ishlatmaysiz.
npm install express # dependencies (ishlash uchun)
npm install -D nodemon # devDependencies (faqat dev; --save-dev qisqasi)
npm install --save-dev jest # to'liq shakliNega farq muhim: production serverga deploy qilganda (10)
npm install --productionfaqatdependenciesni o'rnatadi (devDependencies'siz — yengilroq, tezroq, xavfsizroq). Test/lint vositalari production'da kerak emas. To'g'ri ajratish — professional loyihaning belgisi.
2.5. node_modules va package-lock.json (0.7 chuqurroq)
node_modules/— barcha o'rnatilgan paketlar va ularning dependency'lari (transitive — dependency'ning dependency'si). Juda katta (minglab fayl). Hech qachon git'ga qo'yilmaydi (4.5:.gitignore);package.jsondannpm installbilan tiklanadi.package-lock.json— o'rnatilgan aniq versiyalarni (transitive bilan) qayd etadi. Bu — reproducibility (takrorlanuvchanlik): har dasturchida, har serverda aynan bir xil versiyalar o'rnatiladi. Git'ga qo'shiladi.
package.json: "express": "^4.19.2" (oraliq — 2.6)
package-lock.json: express 4.19.2 (ANIQ) + uning barcha dependency'lari aniq
har joyda bir xil daraxt o'rnatiladi
package-lock.jsonni o'chirmang/e'tiborsiz qoldirmang va commit qiling. Usiz har kim har xil versiya olishi mumkin "menda ishlaydi, sizda yo'q" 0.2-bob.npm ci(CI uchun — 10.5) aynan lock fayldan o'rnatadi.
2.6. Semantic Versioning (semver) — chuqur
Har paket versiyasi MAJOR.MINOR.PATCH (semver.org — 0.7):
4 . 19 . 2
MAJOR MINOR PATCH- PATCH (2) — xato tuzatish; orqaga mos (eski kod ishlaydi).
- MINOR (19) — yangi imkoniyat; orqaga mos (eski kod buzilmaydi).
- MAJOR (4) — buzuvchi (breaking) o'zgarish (eski kod buzilishi mumkin — 4.5).
package.jsondagi oraliq belgilari (eng muhim):
| Belgi | Ma'nosi | Misol ^4.19.2 da |
|---|---|---|
^ (caret) |
MAJOR sobit, MINOR/PATCH yangilanadi | 4.x.x (≥4.19.2, <5.0.0) — default, eng ko'p |
~ (tilde) |
MAJOR.MINOR sobit, faqat PATCH | 4.19.x (≥4.19.2, <4.20.0) |
| (belgisiz) | aniq shu versiya | faqat 4.19.2 |
* / latest |
istalgan eng yangi | xavfli |
>=4.0.0 |
oraliq | shartli |
npm install express # ^4.19.2 (caret — default)
npm install express@4.19.2 # aniq versiya
npm install express@latest # eng yangi
npm install express@4 # eng yangi 4.xNega
^default: xato tuzatish va yangi imkoniyatlar (PATCH/MINOR) avtomatik olinadi (orqaga mos — xavfsiz), lekin MAJOR (buzuvchi) olinmaydi. Bu — xavfsizlik va yangilanish o'rtasidagi muvozanat.package-lock.json2.5-bob aniqlikni kafolatlaydi.
2.7. Scripts — buyruqlarni avtomatlashtirish
scripts — uzun terminal buyruqlariga 0.3-bob qisqa nom (0.7 chuqurroq):
{
"scripts": {
"start": "node index.js", // npm start
"dev": "node --watch index.js", // npm run dev
"test": "jest", // npm test
"lint": "eslint .", // npm run lint
"build": "tsc", // npm run build (7)
"prestart": "npm run build", // start'dan OLDIN avtomatik
"format": "prettier --write ." // npm run format (15.3)
}
}npm run dev # ixtiyoriy script
npm start # maxsus (run'siz)
npm test # maxsus
pre/posthook'lar:prestart—startdan oldin,poststart— keyin avtomatik ishlaydi. Masalanprebuild,pretest. Hayot tsiklini avtomatlashtiradi.
2.8. npm buyruqlari (to'liq)
npm install # package.json'dagi HAMMA paketni o'rnat
npm install <paket> # paket o'rnat + dependencies'ga
npm install -D <paket> # devDependencies'ga
npm install -g <paket> # GLOBAL (CLI vositalari — ehtiyot, 5-bo'lim)
npm uninstall <paket> # o'chirish
npm update # semver oraliqda yangilash (2.6)
npm outdated # eskirgan paketlarni ko'rsatish
npm ls # o'rnatilgan paketlar daraxti
npm run # mavjud scriptlar ro'yxati
npm ci # lock fayldan TOZA o'rnatish (CI/CD — 10.5)2.9. npx — paketni o'rnatmasdan ishlatish
npx — paketni global o'rnatmasdan, bir martalik ishlatish 0.7-bob:
npx create-react-app my-app # React loyiha yaratish (o'rnatmasdan — 11)
npx prettier --write . # bir martalik format
npx jest # lokal paketni ishlatishnpx — global "ifloslanish"ni oldini oladi:
create-react-appni global o'rnatib qo'yish o'rniga, kerak bo'lganda npx orqali eng yangi versiyani ishlatasiz.
2.10. Xavfsizlik va audit (14 ga bog'liq)
Paketlar — boshqalarning kodi; ularda zaiflik (vulnerability) bo'lishi mumkin:
npm audit # zaifliklarni tekshirish (xavfsizlik hisoboti)
npm audit fix # avtomatik tuzatish (mumkin bo'lganlarini)
npm audit fix --force # MAJOR yangilanish ham (ehtiyot — buzishi mumkin)Supply chain xavfi (14): har paket — ishonch. Mashhur paket xakerlanishi yoki zararli paket (typosquatting —
expresvsexpress) bo'lishi mumkin. Yangi paket o'rnatishdan oldin tekshiring: yuklab olishlar soni, oxirgi yangilanish, GitHub yulduzlari.npm auditni muntazam ishlating.
2.11. Litsenziyalar (qisqacha)
Har paketning litsenziyasi bor (huquqiy ruxsat): MIT (eng erkin — istalgan ishlatish), Apache-2.0, ISC, GPL (kodingni ham ochiq qilishni talab qilishi mumkin). Tijoriy loyihada litsenziyaga e'tibor bering (odatda MIT — xavfsiz).
2.12. Monorepo va workspaces (qisqacha — 15.4)
Bir necha paketni bitta repo'da boshqarish — workspaces (npm/yarn/pnpm). Katta loyihalar uchun (frontend + backend + umumiy kod). 15.4-bobda (Turborepo/Nx) chuqur.
2.13. Paketni nashr qilish (publish — qisqacha)
Endi siz iste'molchi emas, muallif tomonida: o'z paketingizni registry'ga 2.1-bob chiqarish — publish. Asosiy oqim:
npm login # npmjs.com hisobiga kirish (bir marta)
npm publish # paketni registry'ga chiqarish
npm version patch # keyingi reliz oldidan versiyani oshirish (2.6)- Versiya — yagona. Bir marta chiqarilgan
1.0.0ni qayta yozolmaysiz (immutable); har reliz uchun versiyani oshiring (npm version— Misol 5). .npmignore/files—package.jsondagi"files"maydoni (yoki.npmignore) qaysi fayllar paketga kirishini belgilaydi (test/manba emas, faqat kerakli build). Aks holda keraksiz fayllar ham yuklanadi.- Scoped paket — nom oldida tashkilot/foydalanuvchi prefiksi:
@mening-tashkilotim/utils. Yagona nom kafolatlaydi (chunki oddiy nomlar band bo'lib ketgan). Scoped paket default — private; ommaviy qilish uchun:
npm publish --access public # scoped paketni ochiq qilishMaslahat: chiqarishdan oldin
npm packbilan paketni sinab ko'ring — u haqiqiy.tgzarxiv yasaydi (yuklamasdan), ichida nimalar borligini tekshiring."private": trueesa paketni tasodifan chiqarib yuborishdan saqlaydi (ilovalarda — har doim yoqing).
3. Sintaksis — tez ma'lumotnoma
# Boshlash
npm init -y
# O'rnatish
npm install # hammasini (package.json'dan)
npm i <paket> # dependencies (i — install qisqasi)
npm i -D <paket> # devDependencies
npm i -g <paket> # global
npm ci # lock fayldan toza (CI — 10.5)
# Boshqarish
npm update npm outdated npm uninstall <p> npm audit
# Ishlatish
npm run <script> npm start npm test npx <paket>SEMVER: MAJOR.MINOR.PATCH
^4.19.2 4.x.x (default) ~4.19.2 4.19.x 4.19.2 aniq4. Batafsil kod namunalari
Misol 1 — Loyihani noldan sozlash (2.3, 2.4)
mkdir backend-api && cd backend-api # (0.3)
npm init -y # package.json (2.3)
npm pkg set type="module" # ESM (2.14)
# Ishlash uchun (dependencies — 2.4)
npm install express mongoose dotenv
# Faqat dev uchun (devDependencies — 2.4)
npm install -D nodemon eslint
# Natija: package.json'da dependencies va devDependencies ajratilgan
# node_modules/ va package-lock.json yaratildi (2.5)Misol 2 — Scripts sozlash (2.7)
{
"scripts": {
"start": "node src/index.js",
"dev": "node --watch src/index.js",
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix",
"prestart": "npm run lint",
"test": "jest --coverage"
}
}npm run dev # ishlab chiqishda (avtomatik qayta ishga tushadi — 5.1)
npm start # prestart (lint) avtomatik ishlaydi, keyin start (2.7)Misol 3 — Semver oraliqlarini tushunish (2.6)
{
"dependencies": {
"express": "^4.19.2", // 4.x.x — yangi MINOR/PATCH avtomatik (default)
"lodash": "~4.17.21", // 4.17.x — faqat PATCH (ehtiyotkor)
"react": "18.2.0", // ANIQ — hech qanday avtomatik yangilanish
"axios": ">=1.0.0 <2.0.0" // oraliq (^1.0.0 ga teng)
}
}# Versiyani tekshirish va yangilash
npm outdated # qaysi paket eskirgan (joriy/wanted/latest)
npm update express # semver oraliqda yangilaydi (^4 ichida)
npm install express@latest # MAJOR ham (^ ni yangilaydi — ehtiyot)Misol 4 — Dependency tahlili va xavfsizlik (2.8, 2.10)
npm ls --depth=0 # to'g'ridan-to'g'ri paketlar (transitive'siz)
npm ls express # express qayerdan kelganini ko'rsatadi
npm audit # zaifliklar hisoboti
# found 3 vulnerabilities (1 moderate, 2 high)
npm audit fix # xavfsiz tuzatishlar (2.10)
npm outdated # eskirganlar
# Package Current Wanted Latest
# express 4.18.0 4.19.2 5.0.0 (Wanted — semver ichida; Latest — eng yangi)Misol 5 — package.json'ni dasturiy boshqarish (npm pkg)
# package.json'ni CLI orqali o'zgartirish (qo'lda tahrirsiz)
npm pkg set scripts.dev="node --watch src/index.js"
npm pkg set engines.node=">=18" # (2.10)
npm pkg get version # versiyani o'qish
npm version patch # versiyani oshirish (1.0.0 1.0.1)
npm version minor # 1.0.0 1.1.0 (2.6)
# npm version git tag ham yaratadi (4.5: reliz)5. To'g'ri va noto'g'ri holatlar
1) node_modules'ni git'ga qo'shish
# minglab fayl, juda katta (2.5)
git add node_modules/
# .gitignore'da node_modules/ 4.5-bob; package.json + lock yetadi2) Dev va prod dependency'larni aralashtirish
# test/lint vositasini dependencies'ga (production'ga keraksiz — 2.4)
npm install jest eslint
# -D bilan devDependencies'ga
npm install -D jest eslint3) Loyiha kutubxonasini global o'rnatish
# global — versiya chalkashligi, loyihaga bog'lanmaydi (0.7)
npm install -g express
# lokal (loyihaga); global faqat CLI vositalari (nodemon, vercel)
npm install express4) package-lock.jsonni e'tiborsiz qoldirish
# commit qilmaslik/o'chirish har kim har xil versiya (2.5)
# commit qiling; CI'da npm ci (lock fayldan — 10.5)5) * yoki latest versiya
// har install'da har xil kutilmagan buzilish (2.6)
"express": "*"
// semver oraliq (^ default)
"express": "^4.19.2"6. Keng tarqalgan xatolar va yechimlari
Xato 1 — Cannot find module 'x'
Sababi: paket o'rnatilmagan yoki node_modules yo'q (0.7, 5.1). Yechimi: npm install (hammasini tiklash); npm install x (aynan).
Xato 2 — npm ERR! code ERESOLVE (dependency conflict)
Sababi: ikki paket bir-biriga zid versiya talab qiladi 2.6-bob. Yechimi: versiyalarni moslash; npm install --legacy-peer-deps (vaqtinchalik); paketlarni yangilash.
Xato 3 — "Menda ishlaydi, sizda yo'q"
Sababi: har xil versiyalar (lock fayl yo'q/eski — 2.5). Yechimi: package-lock.jsonni commit qiling; npm ci bilan o'rnating.
Xato 4 — npm WARN deprecated
Sababi: paket eskirgan (qo'llab-quvvatlanmaydi). Yechimi: muqobil paketga o'ting; odatda ogohlantirish — darrov shoshilmang, lekin rejalashtiring.
Xato 5 — EACCES: permission denied (global o'rnatishda)
Sababi: global papka ruxsati (0.2, 0.7). Yechimi: sudo o'rniga nvm/fnm 0.7-bob; yoki lokal o'rnating.
Xato 6 — Katta xavfsizlik zaifligi (npm audit)
Sababi: zaif paket 2.10-bob. Yechimi: npm audit fix; bo'lmasa muqobil paket yoki versiya; muntazam tekshiring (14).
7. Integratsiya — bu mavzu stack'ning qayerida uchraydi
- Node 5.1-bob, modullar 2.14-bob: npm — Node ekotizimi.
- Har loyiha (5–13): Express, Mongoose, React, Next — npm paketlari.
- Scripts 10.5-bob: CI/CD —
npm ci,npm run build,npm test. - TypeScript (7):
npm i -D typescript; build script. - Conventional commits/semver (4.5, 0.7):
npm version— reliz. - Xavfsizlik (14):
npm audit, supply chain. - Monorepo 15.4-bob: workspaces.
8. Eng yaxshi amaliyotlar (best practices)
dependenciesvadevDependenciesni to'g'ri ajrating (-Ddev uchun — 2.4).package-lock.jsonni commit qiling; CI'danpm ci(2.5, 10.5).node_modulesni.gitignore4.5-bob.^(default) semver —*/latestishlatmang 2.6-bob.- Loyiha kutubxonasi — lokal, CLI — global 0.7-bob.
npm auditni muntazam — xavfsizlik (2.10, 14).- Yangi paketdan oldin tekshiring — yuklab olishlar, yangilanish, GitHub (supply chain — 2.10).
scriptsbilan avtomatlashtiring — start/dev/test/lint/build 2.7-bob.- Kam dependency — har paket — xavf va og'irlik; haqiqatan kerakmi, o'ylang.
9. Amaliy loyiha: "Professional Loyiha Ekotizimini Qurish"
npm va package.json'ni professional darajada boshqarishni mustahkamlash.
Maqsad
package.json'ning har qismini, dependency turlarini, semver'ni va scripts'ni amalda qo'llab, mustahkam, xavfsiz loyiha asosini qurish.
Talablar (requirements)
- Loyiha sozlash:
npm init -y, ESM (type: module); to'liq package.json (name, version, description, main, author, license — 2.2). - Dependency ajratish: kamida 3
dependencies(express, dotenv, ...) va 3devDependencies(nodemon, eslint, jest) to'g'ri ajratilgan 2.4-bob. - Scripts:
start,dev(--watch),lint,test, va kamida bittapre/posthook (2.7, Misol 2). - Semver tahlili: har dependency uchun
^/~/aniq farqini izohlang; bittasini har xil oraliq bilan sozlab,npm outdatedbilan ko'ring (2.6, Misol 3). - Lock va gitignore:
package-lock.jsoncommit;node_modulesignore (2.5, 4.5). - Xavfsizlik:
npm auditishlatib, hisobotni o'qing; zaiflik bo'lsanpm audit fix2.10-bob. - npx: biror vositani npx bilan o'rnatmasdan ishlating (Misol/2.9).
npm version: versiyani patch/minor oshiring; o'zgarishni ko'ring (Misol 5).engines: Node versiyasini cheklab qo'ying 2.10-bob.
Maslahatlar (hint)
npm pkg setbilan package.json'ni CLI orqali boshqaring (Misol 5).npm ls --depth=0— to'g'ridan-to'g'ri paketlar 2.8-bob.npm outdated— Current/Wanted/Latest farqini tushuning 2.6-bob.-D— devDependencies 2.4-bob; production'danpm install --production.npm audithisobotini o'qib, har zaiflik nima ekanini tushuning (14)..gitignoredanode_modules,.env4.5-bob.
"Tayyor" mezonlari (acceptance criteria)
- To'liq package.json (barcha asosiy maydonlar).
- dependencies va devDependencies to'g'ri ajratilgan.
- Kamida 5 script + bitta pre/post hook ishlaydi.
- Har dependency semver oralig'i izohlangan.
- package-lock.json commit, node_modules ignore.
-
npm auditishlatilgan va hisobot tushunilgan. - npx bilan vosita ishlatilgan.
-
npm versionbilan versiya oshirilgan.
Yechim kodi ataylab berilmagan — bu loyihani o'zingiz yozib ko'ring.
10. Xulosa va keyingi bobga ko'prik
Bu bobda Node ekotizimini boshqaruvchi — npmni chuqur o'rgandik:
- npm — CLI + registry + sayt; millionlab paket.
- package.json — loyiha pasporti: name/version/scripts/dependencies/engines.
- dependencies (ishlash) vs devDependencies (
-D, faqat dev). - node_modules (ignore) + package-lock.json (commit — reproducibility);
npm ci. - Semver (MAJOR.MINOR.PATCH):
^(default, MINOR/PATCH) /~(PATCH) / aniq. - scripts (avtomatlashtirish, pre/post hook); npx (o'rnatmasdan);
npm audit(xavfsizlik — 14).
Keyingi bob — 5.3-bob: Core modullar (fs, path, os, util, crypto). npm paketlarini bildik; endi Node'ning o'rnatilgan (built-in) modullarini — paketsiz, darrov mavjud kuchli vositalarini — chuqur o'rganamiz: fs (fayl — 0.2), path (yo'l — 0.2), os (tizim — 0.2), crypto (xavfsizlik/hash — 3.5, 5.15), util. Bular real backend'ning kunlik quroli.
Foydalanilgan rasmiy/ishonchli manbalar
- docs.npmjs.com — package.json, dependencies, scripts, npm CLI, npm audit
- semver.org — Semantic Versioning 2.0.0 (MAJOR.MINOR.PATCH, oraliqlar)
- nodejs.org/learn — npm package manager kirish
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!