Mundarija (40)
- Bu darsda
- 1. Nega bu kerak?
- 2. npm nima?
- 2.1 Ikki narsa bir nomda
- 2.2 Paketlarga misollar
- 3. package.json: loyiha pasporti
- 3.1 Yaratish
- 3.2 Har qator nima degani
- 3.3 "type": "module"
- 4. Paket o'rnatish: npm install
- 4.1 Birinchi paket
- 4.2 Nima o'zgardi
- 4.3 Paketni ishlatish
- 4.4 Olib tashlash
- 5. dependencies va devDependencies
- 6. node_modules va package-lock.json
- 6.1 node_modules — og'ir, lekin qayta tiklanadi
- 6.2 package-lock.json — aniq versiyalar muhri
- 7. scripts: buyruqlarga nom berish
- 7.1 Yozish va ishga tushirish
- 7.2 Nega kerak
- 8. npx: o'rnatmasdan ishga tushirish
- 9. Versiya raqamlari: semver qisqacha
- 9.1 Uch raqam
- 9.2 ^ va ~ belgilari
- 10. Ko'p uchraydigan xatolar
- 10.1 package.json yo'q papkada
- 10.2 Paket nomida xato
- 10.3 import ishlamayapti
- 10.4 Paket topilmadi
- 10.5 Skript yo'q
- 11. Mashqlar
- 1-mashq (oson): Pasport
- 2-mashq (o'rta): Ikki xil bog'liqlik
- 3-mashq (o'rta): Rangli salom
- 4-mashq (qiyin): Qayta tiklash
- 12. Hujumchi nigohi
- 13. Real ishda
- Xulosa
- Manbalar
npm'ga birinchi qadam: package.json, npm install va scripts
Qisqacha: npm — Node.js bilan birga keladigan paket menejeri: boshqa dasturchilar yozgan tayyor kodni (paketni) bitta buyruq bilan loyihangizga qo'shadi.
npm init -yloyiha "pasporti" —package.jsonni yaratadi,npm install nompaketni o'rnatadi va pasportga yozadi. Paketlarnode_modulespapkasiga tushadi, aniq versiyalaripackage-lock.jsonda saqlanadi.scriptsbo'limidagi buyruqlarnpm run nombilan ishga tushadi.
Bu darsda
- npm nima ekanini va u qaysi muammoni hal qilishini tushuntirasiz.
npm init -ybilanpackage.jsonyaratib, uning har bir qatorini o'qiy olasiz.- Paketni o'rnatasiz, olib tashlaysiz va
dependenciesbilandevDependenciesni farqlaysiz. node_modulesvapackage-lock.jsonnima ekanini, qaysi biri saqlanishi kerakligini bilasiz.scriptsyozasiz,npxbilan paketni o'rnatmasdan ishga tushirasiz va^1.2.3belgisini o'qiysiz.
Oldin bilishingiz kerak: Node.js nima va uni o'rnatish, JSON: dasturlar tili, Dastur o'rnatish va paket menejerlari.
1. Nega bu kerak?
Siz Telegram bot yozmoqchisiz. Bot Telegram serveri bilan gaplashishi, xabarlarni o'qishi, javob yuborishi kerak. Buni noldan yozish — haftalab ish.
Lekin bu ishni kimdir allaqachon qilgan va kodini hammaga ochiq qo'ygan. Siz uni olib, ishlatasiz. Xuddi uy qurayotganda g'ishtni o'zingiz pishirmay, bozordan tayyor olganingizdek.
OS darajasidagi paket menejerlari darsida winget va brew dasturlarni kompyuterga o'rnatishini ko'rdik. npm ham paket menejeri, lekin boshqa darajada: u butun kompyuterga emas, bitta loyihaga kod qo'shadi.
2. npm nima?
2.1 Ikki narsa bir nomda
npm (Node Package Manager — Node paket menejeri) ikki narsaning nomi:
- Terminal buyrug'i —
npm. Node.js bilan birga o'rnatiladi. Oldingi darsdanpm -vbilan tekshirgan edik. - Registr (registry) — npmjs.com saytidagi ulkan onlayn katalog. Unda millionlab paket bor.
Paket (package) — boshqalar foydalanishi uchun e'lon qilingan tayyor kod to'plami. Ko'pincha kutubxona (library) deb ham ataladi: biror ishni bajaradigan tayyor funksiyalar to'plami.
flowchart LR
A["Siz: npm install picocolors"] --> B["npm registry<br/>npmjs.com"]
B --> C["node_modules/picocolors"]
A --> D["package.json ga yozuv"]
A --> E["package-lock.json ga<br/>aniq versiya"]2.2 Paketlarga misollar
| Paket | Nima qiladi | Qachon o'rganamiz |
|---|---|---|
picocolors |
Terminalda rangli matn | Shu darsda |
prettier |
Kodni tekislaydi | Shu darsda (o'rnatamiz) |
express |
Server yaratadi | 25-qism |
react |
Sayt interfeysi yasaydi | 17-qism |
Tekshirib ko'ring:
winget installvanpm installning farqi nimada?
Javob
winget dasturni butun kompyuterga o'rnatadi — masalan, VS Code yoki Git. npm esa kodni bitta loyihaning papkasiga qo'shadi. Boshqa loyiha o'sha paketni ko'rmaydi, unga kerak bo'lsa, o'zi alohida o'rnatadi.
3. package.json: loyiha pasporti
3.1 Yaratish
Har bir Node.js loyihasi package.json faylidan boshlanadi. Unda loyiha nomi, qaysi paketlar kerakligi va qanday buyruqlar bilan ishga tushishi yoziladi.
Yangi papka ochib, VS Code'da oching va ichki terminalda yozing:
mkdir mening-loyiham
cd mening-loyiham
npm init -ynpm init — "yangi loyiha boshlash". U nom, versiya, muallif kabi savollarni beradi. -y (yes — "ha") hamma savolga "standart javob bo'laversin" deydi va darhol fayl yaratadi.
Natija (Node 24 bilan kelgan npm 11 da):
{
"name": "mening-loyiham",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs"
}3.2 Har qator nima degani
| Kalit | Ma'nosi |
|---|---|
name |
Loyiha nomi (papka nomidan olindi) |
version |
Loyiha versiyasi |
description |
Qisqa tavsif (bo'sh) |
main |
Asosiy fayl nomi |
| Kalit | Ma'nosi |
|---|---|
scripts |
Buyruqlar ro'yxati (quyida ko'ramiz) |
keywords, author |
Kalit so'zlar, muallif |
license |
Kodni boshqalar qanday ishlata olishi (ISC — erkin litsenziya) |
type |
Kod qaysi modul usulida yozilgan |
Hozircha type dan boshqasini o'zgartirish shart emas. type ni esa hozir o'zgartiramiz.
3.3 "type": "module"
JavaScript'da boshqa fayldagi yoki paketdagi kodni olib kelishning ikki usuli bor:
- ESM (ECMAScript modules) — zamonaviy usul,
importso'zi bilan. Bu kursda asosan shu ishlatiladi. - CommonJS — eski usul,
require(...)bilan. Eski kodlarda ko'p uchraydi.
npm 11 standart holatda "type": "commonjs" yozadi. Biz import ishlatamiz, shuning uchun uni o'zgartiramiz:
"type": "module"Modullarni 10-qismda chuqur o'rganamiz. Hozircha qoida: import ishlatadigan loyihada package.json da "type": "module" bo'lsin.
Tekshirib ko'ring:
npm initvanpm init -yfarqi nimada?
Javob
npm init har bir maydon uchun savol beradi va javobingizni kutadi. npm init -y savol bermaydi — hammasiga standart qiymat qo'yib, faylni darhol yaratadi. Keyin kerak bo'lsa, package.json ni qo'lda tahrirlaysiz.
4. Paket o'rnatish: npm install
4.1 Birinchi paket
picocolors — terminalda matnni rangli qiladigan kichik paket. O'rnatamiz:
npm install picocolorsadded 1 package, and audited 2 packages in 2s
found 0 vulnerabilitiesadded 1 package— 1 ta paket qo'shildi.audited— npm o'rnatilganlarni ma'lum zaifliklar ro'yxati bilan solishtirdi.found 0 vulnerabilities— xavfsizlik muammosi topilmadi.
install ning qisqasi — i: npm i picocolors ham xuddi shu.
4.2 Nima o'zgardi
Loyihada uchta o'zgarish bo'ldi:
mening-loyiham/
├── node_modules/ ← paketlarning o'zi
│ └── picocolors/
├── package.json ← "dependencies" qo'shildi
└── package-lock.json ← aniq versiyalarpackage.json ga yangi bo'lim qo'shildi:
"dependencies": {
"picocolors": "^1.1.1"
}^1.1.1 belgisini "Versiya raqamlari" bo'limida o'qiymiz.
4.3 Paketni ishlatish
index.js fayl yarating:
import pc from "picocolors";
console.log(pc.green("Salom, npm!"));
console.log(pc.bold("IlmHamroh"));Har qator:
import pc from "picocolors";— "picocolors paketini olib kel va unipcdeb atayman".pc.green("...")— matnni yashil rangga bo'yaydi.pc.bold("...")— matnni qalin qiladi.
Ishga tushiring:
node index.jsTerminalda (ranglar bu yerda ko'rinmaydi, sizda — ko'rinadi):
Salom, npm!
IlmHamrohBirinchi qator yashil, ikkinchisi qalin. Siz rang chiqarishning qanday ishlashini bilmaysiz — va bilish shart ham emas. Paket shu uchun kerak.
4.4 Olib tashlash
npm uninstall picocolorsPaket node_modules dan, package.json dan va lock-fayldan o'chiriladi.
Tekshirib ko'ring:
npm install picocolorsdan keyin loyihada qaysi uchta narsa o'zgaradi?
Javob
node_modules/picocolorspapkasi paydo bo'ladi — paketning kodi.package.jsonga"dependencies"ichida"picocolors": "^1.1.1"yoziladi.package-lock.jsonyaratiladi (yoki yangilanadi) — aniq versiya bilan.
5. dependencies va devDependencies
Paketlar ikki xil bo'ladi:
| Turi | O'rnatish | Qachon kerak |
|---|---|---|
dependencies |
npm install nom |
Dastur ishlashi uchun |
devDependencies |
npm install -D nom |
Faqat dasturchiga, kod yozish paytida |
Bog'liqlik (dependency) — loyihangiz tayanadigan paket. Uning "ishlash uchun" va "yozish uchun" turlari bor.
O'xshatish: restoran. Go'sht, guruch, sabzi — oshning o'zi uchun kerak (dependencies). Pichoq, qozon, tarozi — faqat oshpazga, mijozning likopchasiga tushmaydi (devDependencies).
picocolorsdasturingiz ishlaganda rang chiqaradi —dependencies.prettierfaqat siz kod yozayotganda uni tekislaydi. Tayyor dastur uni ishlatmaydi —devDependencies.
npm install -D prettier-D — --save-dev ning qisqasi. package.json da yangi bo'lim paydo bo'ladi:
"devDependencies": {
"prettier": "^3.9.9"
}Versiya raqami siz o'rnatgan kunga qarab boshqacha bo'ladi.
Tekshirib ko'ring: Sayt serverini yaratadigan
expresspaketi qaysi bo'limga tushadi? Kodni tekshiradiganeslint-chi?
Javob
express — dependencies: server usiz ishlamaydi. eslint — devDependencies: u faqat kod yozish paytida xatolarni topadi, tayyor dasturga kerak emas.
6. node_modules va package-lock.json
6.1 node_modules — og'ir, lekin qayta tiklanadi
O'rnatilgan har paketning kodi node_modules papkasiga tushadi. Paketlarning ham o'z bog'liqliklari bor, ularniki ham — shuning uchun bu papka tez kattalashadi. Oddiy React loyihasida unda o'n minglab fayl va yuzlab megabayt bo'ladi.
Lekin uni saqlash yoki boshqa kompyuterga ko'chirish shart emas. package.json da nima kerakligi yozilgan. Boshqa kompyuterda loyiha papkasida:
npm install— paket nomisiz. npm package.json ni o'qiydi va node_modules ni qaytadan yuklaydi.
Shuning uchun loyihani do'stingizga yuborganda yoki keyinchalik Git'ga saqlaganda node_modules qo'shilmaydi. Git'da buning uchun .gitignore fayli bor (qidirish darsida ko'rgan edik), unga node_modules yoziladi. Git'ni 07-qismda o'rganamiz.
6.2 package-lock.json — aniq versiyalar muhri
package.json da "^1.1.1" yozilgan — bu "1.1.1 yoki undan yangirog'i" degani. Bugun o'rnatsangiz 1.1.1, bir oydan keyin 1.2.0 tushishi mumkin. Jamoada kimdadir bir versiya, kimdadir boshqasi — "menda ishlaydi, senda ishlamaydi" muammosi.
package-lock.json bunga yo'l qo'ymaydi. Unda har paketning aniq o'rnatilgan versiyasi yozilgan:
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/...tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX...",
"license": "ISC"
}version— aniq versiya.resolved— qayerdan yuklangani.integrity— faylning "barmoq izi". Yuklangan fayl buzilgan yoki almashtirilgan bo'lsa, npm buni sezadi va o'rnatmaydi.
Bu fayl qo'lda tahrirlanmaydi — npm o'zi yozadi. U saqlanadi va loyiha bilan birga yuboriladi.
| Fayl/papka | Saqlanadimi? | Nega |
|---|---|---|
package.json |
Ha | Loyiha pasporti |
package-lock.json |
Ha | Hammada bir xil versiya |
node_modules/ |
Yo'q | npm install qayta tiklaydi |
Maslahat: Serverlarda va avtomatik tekshiruvlarda
npm installo'rniganpm ciishlatiladi. U faqat lock-fayldagi aniq versiyalarni o'rnatadi va hech narsani yangilamaydi. Bu haqda 16-qismda batafsil.
Tekshirib ko'ring: Jasur loyihani fleshkaga ko'chirmoqchi, lekin
node_modules400 MB. Nima qilsin?
Javob
node_modules ni ko'chirmasin. package.json va package-lock.json bilan loyiha fayllarini ko'chirsin. Yangi kompyuterda loyiha papkasida npm install qilsa, node_modules lock-fayldagi aynan o'sha versiyalar bilan qayta yuklanadi.
7. scripts: buyruqlarga nom berish
7.1 Yozish va ishga tushirish
package.json dagi scripts bo'limi — loyihaning buyruqlar ro'yxati. Har buyruqqa qisqa nom berasiz:
"scripts": {
"start": "node index.js",
"dev": "node --watch index.js",
"salom": "echo Salom IlmHamroh"
}Ishga tushirish — npm run va nom:
npm run salom
> mening-loyiham@1.0.0 salom
> echo Salom IlmHamroh
Salom IlmHamrohnpm avval qaysi buyruqni bajarayotganini > bilan ko'rsatadi, keyin natijani chiqaradi.
start va test — maxsus nomlar: ularda run ni tashlab ketsa bo'ladi. npm start = npm run start.
Hamma skriptlar ro'yxati — faqat npm run (nomsiz).
7.2 Nega kerak
- Uzun buyruqni eslab qolish shart emas:
npm run devhamma loyihada deyarli bir xil. - Yangi dasturchi
package.jsonni ochib, loyiha qanday ishga tushishini darhol ko'radi. - VS Code tasklari ham npm skriptlarini o'zi taniydi va ro'yxatda ko'rsatadi.
Diqqat: Windows'da npm skriptlari
cmd.exeorqali bajariladi — PowerShell'dan ishga tushirsangiz ham.cmdbitta tirnoqni (') tushunmaydi:"echo 'Salom'"skripti'Salom'ni tirnoqlari bilan chiqaradi. Skriptlarda tirnoqsiz yozing yoki ichki qo'shtirnoqni\"bilan ekranlang.
Tekshirib ko'ring:
scriptsda"tekshir": "node tekshir.js"bor. Uninpm tekshirbilan ishga tushirsa bo'ladimi?
Javob
Yo'q — npm run tekshir kerak. run siz faqat start va test kabi maxsus nomlar ishlaydi. npm tekshir yozsangiz, npm "bunday buyruq yo'q" deb xato beradi.
8. npx: o'rnatmasdan ishga tushirish
Ba'zi paketlar kutubxona emas, buyruq — terminalda ishga tushadigan dastur. Ularni har loyihaga o'rnatish shart emas. npx — paketni vaqtincha yuklab, bir marta ishga tushiradigan buyruq. U ham npm bilan birga keladi.
Sinab ko'ramiz — cowsay matnni sigir "gapirayotgandek" chiqaradi:
npx cowsay SalomBirinchi marta npx so'raydi:
Need to install the following packages:
cowsay@1.6.0
Ok to proceed? (y)"Quyidagi paketni o'rnatish kerak. Davom etaymi?" — y bosib Enter:
_______
< Salom >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||Paket loyihangizga qo'shilmadi — package.json o'zgarmaydi. npx uni alohida keshda saqlaydi, keyingi safar tezroq ochiladi.
Real ishda npx ko'pincha loyiha yaratish uchun ishlatiladi. Masalan, npm create vite@latest — yangi frontend loyihasi (16-qismda). Loyihada o'rnatilgan buyruqni ishga tushirishda ham qulay: npx prettier --write . — node_modules dagi Prettier bilan hamma faylni tekislash.
Diqqat: npx paket kodini kompyuteringizda ishga tushiradi. Nomini diqqat bilan yozing —
cowsayo'rnigacowseyyozsangiz, butunlay boshqa (ehtimol zararli) paket ishlab ketishi mumkin. "Ok to proceed?" savoli — tekshirish uchun oxirgi imkoniyat.
9. Versiya raqamlari: semver qisqacha
9.1 Uch raqam
Paket versiyalari uch raqamdan iborat: MAJOR.MINOR.PATCH. Bu tartib semver (Semantic Versioning — ma'noli versiyalash) deyiladi.
| Qism | Qachon oshadi | Misol: 3.9.9 dan |
|---|---|---|
| PATCH (tuzatish) | Xato tuzatildi, boshqa hech narsa o'zgarmadi | 3.9.10 |
| MINOR (kichik) | Yangi imkoniyat qo'shildi, eskisi buzilmadi | 3.10.0 |
| MAJOR (katta) | Katta o'zgarish, eski kod buzilishi mumkin | 4.0.0 |
9.2 ^ va ~ belgilari
package.json dagi versiya oldidagi belgi — "qaysi yangilanishlarga ruxsat":
| Yozuv | Ruxsat | Misol |
|---|---|---|
^1.2.3 |
MAJOR o'zgarmasa, hammasi | 1.2.3 dan 2.0.0 gacha (2 emas) |
~1.2.3 |
Faqat PATCH | 1.2.3 dan 1.3.0 gacha (1.3 emas) |
1.2.3 |
Faqat shu versiya | faqat 1.2.3 |
npm standart holatda ^ qo'yadi — "buzmaydigan yangilanishlar kelaversin".
Bitta istisno: 0.x.y versiyalar hali "tayyor emas" hisoblanadi, shuning uchun ^0.2.3 faqat 0.2.x ga ruxsat beradi.
Endi siz to'ldiring. package.json da "prettier": "^3.9.9" yozilgan. 4.0.0 o'rnatiladimi?
Tekshirib ko'ring:
"express": "~5.1.0". Qaysi versiyalar mos keladi:5.1.4,5.2.0,6.0.0?
Javob
Faqat 5.1.4. ~ faqat PATCH o'zgarishiga ruxsat beradi: 5.1.x. 5.2.0 — MINOR o'zgargan, 6.0.0 — MAJOR o'zgargan.
10. Ko'p uchraydigan xatolar
10.1 package.json yo'q papkada
Belgisi:
npm error code ENOENT
npm error enoent Could not read package.json: Error: ENOENT:
no such file or directory, open 'C:\Users\Ali\package.json'Tarjima: "package.json ni o'qib bo'lmadi: bunday fayl yoki papka yo'q." ENOENT — "Error NO ENTry", ya'ni "topilmadi".
Sabab: npm start yoki npm run ni loyiha papkasidan tashqarida yozdingiz. Xabardagi yo'l qayerda qidirganini ko'rsatadi.
Tuzatish: cd bilan loyiha papkasiga o'ting. Yangi loyiha bo'lsa — avval npm init -y.
10.2 Paket nomida xato
Belgisi:
npm error code E404
npm error 404 Not Found - GET https://registry.npmjs.org/picocolorTarjima: "404 — topilmadi" (HTTP status kodlari darsi).
Sabab: registrda bunday nomli paket yo'q. Bu yerda oxiridagi s tushib qolgan.
Tuzatish: nomni npmjs.com'da tekshiring. Xato yozilgan nom bilan mavjud boshqa paket bo'lsa, xato chiqmaydi — boshqa narsa o'rnatiladi. Bu yanada xavfli.
10.3 import ishlamayapti
Belgisi:
SyntaxError: Cannot use import statement outside a moduleTarjima: "import ni moduldan tashqarida ishlatib bo'lmaydi."
Sabab: package.json da "type": "commonjs" (yoki type umuman yo'q), siz esa import yozgansiz.
Tuzatish: package.json da "type": "module" qiling.
10.4 Paket topilmadi
Belgisi:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'picocolors'
imported from C:\loyihalar\mening-loyiham\index.jsTarjima: "index.js import qilgan 'picocolors' paketi topilmadi."
Sabab: paket o'rnatilmagan — ko'pincha loyihani boshqa joydan ko'chirgandan keyin npm install unutilgan.
Tuzatish: loyiha papkasida npm install.
10.5 Skript yo'q
Belgisi: npm error Missing script: "dev".
Tarjima: "dev degan skript yo'q."
Tuzatish: npm run bilan mavjud skriptlarni ko'ring. Nom xato yozilgan yoki scripts ga qo'shilmagan.
11. Mashqlar
1-mashq (oson): Pasport
sinov-npmpapkasini yarating va undanpm init -yqiling.package.jsonni oching.
Savollar: loyiha nomi nima? scripts da nechta skript bor? type qiymati nima?
Yechim
- Nomi —
sinov-npm(papka nomidan). - Bitta skript —
test. type—"commonjs"(npm 11 da). npm 10 da bu qator umuman bo'lmaydi — bu ham CommonJS degani.
2-mashq (o'rta): Ikki xil bog'liqlik
sinov-npm ga picocolors ni oddiy bog'liqlik, prettier ni dasturchi asbobi sifatida o'rnating. Keyin package.json qanday ko'rinishini yozing (faqat ikki bo'lim). Yordam: -D — "dependencies va devDependencies" bo'limida.
Yechim
npm install picocolors
npm install -D prettier"dependencies": {
"picocolors": "^1.1.1"
},
"devDependencies": {
"prettier": "^3.9.9"
}Versiya raqamlari sizda boshqacha bo'lishi mumkin — o'rnatilgan kundagi eng yangisi yoziladi.
3-mashq (o'rta): Rangli salom
sinov-npm da index.js yozing: u qizil rangda Diqqat! va yashil rangda Hammasi joyida chiqarsin. npm start bilan ishga tushsin.
Yordam: qizil — pc.red(...), yashil — pc.green(...). "type": "module" va start skriptini unutmang.
Yechim
package.json da:
"type": "module",
"scripts": {
"start": "node index.js"
}index.js:
import pc from "picocolors";
console.log(pc.red("Diqqat!"));
console.log(pc.green("Hammasi joyida"));Terminalda npm start:
> sinov-npm@1.0.0 start
> node index.js
Diqqat!
Hammasi joyidaBirinchi qator qizil, ikkinchisi yashil bo'ladi.
4-mashq (qiyin): Qayta tiklash
sinov-npmdaginode_modulespapkasini o'chiring.npm startqiling — qanday xato chiqadi?- Xatoni bitta buyruq bilan tuzating.
- Qaysi fayl
node_modulesni aynan o'sha versiyalar bilan tiklashga imkon berdi?
Yechim
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'picocolors'— paket kodi o'chgan.npm install—node_modulesqayta yuklanadi.package-lock.json— unda aniq versiyalar va barmoq izlari (integrity) bor.package.jsonfaqat "qaysi paket va qaysi oraliq" deydi.
Xulosa: node_modules — vaqtinchalik, package.json va lock-fayl — asosiy.
12. Hujumchi nigohi
npm'dagi paketni istalgan odam e'lon qila oladi. Siz npm install qilganingizda — boshqa odamning kodini kompyuteringizda ishga tushirasiz. Hujumchilar buni biladi.
Hujum 1 — o'xshash nom. Mashhur paketga bir harfi farq qiladigan nom bilan zararli paket chiqariladi. picocolors ni shoshib yozgan dasturchi bitta harfni adashtiradi va o'sha soxta paketni o'rnatadi.
Hujum 2 — o'rnatish skripti. Paket package.json ida o'rnatilganda avtomatik ishlaydigan skript (masalan postinstall) bo'lishi mumkin. Zararli paket shu skript bilan .env fayllari va tokenlaringizni o'g'irlaydi — siz import ham qilmasdan.
Hujum 3 — yaxshi paketni egallash. Muallifning hisobi o'g'irlanadi va mashhur paketga zararli yangilanish chiqariladi. 2025-yil sentabrida shunday bo'lgan: chalk va debug kabi paketlarning (birgalikda haftasiga milliardlab yuklanadi) zararli versiyalari bir necha soat registrda turdi. O'sha oyda o'zini o'zi tarqatadigan "Shai-Hulud" zararli dasturi yuzlab paketga yuqdi.
Qanday qarshi turamiz:
- Paket nomini npmjs.com'dan ko'chirib olamiz, xotiradan yozmaymiz. Haftalik yuklab olishlar soni va oxirgi yangilanishga qaraymiz.
- Keraksiz paket qo'shmaymiz. 5 qatorlik ish uchun paket shart emas.
package-lock.jsonni saqlaymiz — kutilmagan yangi versiya o'zi kirib kelmaydi.npm audit— o'rnatilganlarda ma'lum zaifliklar bormi, tekshiradi.- Parol va tokenlarni kodga yozmaymiz (.env darsi).
13. Real ishda
- Har bir loyiha
package.jsonbilan boshlanadi. Ishga kirgan birinchi kuningiz: loyihani olasiz →npm install→npm run dev. Qaysi buyruq borliginiscriptsdan ko'rasiz. - Kurs davomida npm har qismda: React, Express, Prettier, ESLint, Vite — hammasi npm paketi.
- Muqobillar.
pnpmvayarn— npm'ning o'rnini bosadigan boshqa paket menejerlari,bun— Node.js'ning muqobili. Ular hampackage.jsonbilan ishlaydi. 16-qismda solishtiramiz. - Intervyuda so'raladi: "
dependenciesvadevDependenciesfarqi?", "package-lock.jsonnima uchun?", "^va~farqi?". Bu darsdan keyin uchalasiga javob bera olasiz.
Xulosa
- npm — Node.js bilan keladigan paket menejeri; paketlar npmjs.com registridan olinadi.
npm init -y→package.json;importuchun"type": "module".npm install nom→dependencies;npm install -D nom→devDependencies;npm uninstall nom— olib tashlash.node_modulessaqlanmaydi,npm installuni tiklaydi;package-lock.jsonsaqlanadi.scripts→npm run nom(start,test—runsiz);npx— o'rnatmasdan ishga tushirish.^1.2.3— MAJOR o'zgarmaguncha yangilanish;~1.2.3— faqat PATCH.
Keyingi dars: Boshqa muharrirlar va Vim'da omon qolish — VS Code'dan boshqa muharrirlar bilan tanishasiz va Vim'dan qanday chiqishni o'rganasiz.
Manbalar
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!