Mundarija (32)
- Bu darsda
- 1. Nega bu kerak?
- 2. Nima eskirgan?
- 2.1 npm outdated — takror
- 2.2 npm-check-updates: turlarga ajratilgan ro'yxat
- 2.3 Foydali bayroqlar
- 3. Changelog: nima o'zgargan?
- 3.1 Qayerdan o'qiladi
- 3.2 O'z kodingiz bilan solishtirish
- 3.3 Changelog bo'lmasa
- 4. MAJOR yangilash: tartib bilan
- 4.1 Avval testsiz nima bo'lishini ko'ramiz
- 4.2 To'g'ri tartib
- 4.3 ncu --doctor: aybdorni topish
- 5. Codemod: kodni avtomatik moslash
- 5.1 ESLint 10 va eski config
- 5.2 Codemod nima
- 6. Avtomatik PR'lar: Dependabot va Renovate
- 6.1 G'oya
- 6.2 Dependabot config
- 6.3 Renovate config
- 6.4 vazifalar va robotlar
- 7. Strategiya: bir varaqda
- 8. Ko'p uchraydigan xatolar
- 9. Mashqlar
- 1-mashq (oson): Turini ayting
- 2-mashq (o'rta): Changelog tergovi
- 3-mashq (qiyin): Yangilash rejasi
- 4-mashq: Amaliy tajriba — o'z loyihangizda
- 10. Real ishda
- Xulosa
- Manbalar
Bog'liqliklarni yangilash strategiyasi: npm outdated, ncu, changelog, Renovate va Dependabot
Qisqacha: Paketlarni yangilamaslik ham, hammasini birdan yangilash ham xavfli. To'g'ri yo'l — muntazam va kichik qadamlar:
npm outdatedyokinpx npm-check-updatesbilan nima eskirganini ko'rish, PATCH va MINOR'ni guruhlab bitta PR'da, har MAJOR'ni esa changelog o'qib, testlar bilan alohida yangilash. Bu ishni GitHub'da Dependabot yoki Renovate avtomatik PR'lar bilan qiladi; sizning vazifangiz — PR'ni tekshirib, testlar yashil bo'lsa qabul qilish.
Bu darsda
npm outdatedvanpm-check-updates(ncu) chiqishidan yangilash rejasini tuzasiz.- CHANGELOG va release notes'dan breaking change'ni topasiz.
- MAJOR yangilashni xavfsiz bajarasiz: avval kod, keyin versiya, keyin test.
- Codemod nima ekanini va uning chegarasini bilasiz.
- Dependabot va Renovate config'ini o'qiy olasiz: guruhlar, jadval, kutish muddati.
Oldin bilishingiz kerak: npm buyruqlari chuqur, Semver va versiya diapazonlari, Lock-fayllar va npm ci, Ta'minot zanjiri xavfsizligi.
1. Nega bu kerak?
Oldingi darsda ko'rdik: eski nanoid da zaiflik bor, tuzatish esa yangi versiyada. Demak, yangilamaslik — xavf. Lekin chalk hodisasi boshqa narsani ham ko'rsatdi: eng yangi versiya ham xavfli bo'lishi mumkin. Ikki xavf o'rtasida yo'l kerak.
Sardor «Bahor» uchun ikki yil oldin yozilgan menyu loyihasini oldi. Unda eslint 9.0.0, prettier 3.0.0, nanoid 3.3.20. Jasur aka: "Hammasini yangila, xavfsiz bo'lsin" dedi. Sardor npx npm-check-updates -u ni bosdi, keyin npm install — va testlar qizil. Qaysi paket buzdi? To'rttasi birdan o'zgargan, bilib bo'lmaydi.
Bu darsda Sardorning muammosini bosqichma-bosqich yechamiz. Hayotiy o'xshatish: mashinaning moyini har 10 000 km da almashtirsangiz — 15 daqiqalik ish. Besh yil almashtirmasangiz — dvigatel ta'miri. Bog'liqliklar ham shunday: haftada bir kichik yangilash arzon, ikki yilda bir katta "ko'chish" — qimmat va qo'rqinchli.
Maslahat: Darsdagi chiqishlar 2026-10-10 da Windows 11, Node 24.21.0, npm 11.19.0 va npm-check-updates 23.1.0 bilan sinov papkasida olingan. Siz o'qiyotgan kunda versiyalar boshqacha bo'ladi — buyruqlar va mantiq o'sha.
2. Nima eskirgan?
2.1 npm outdated — takror
npm buyruqlari darsidan bilasiz: npm outdated Current, Wanted va Latest ni ko'rsatadi. Sardorning loyihasida (hamma versiya -E bilan, aniq):
npm outdatedPackage Current Wanted Latest Location Depended by
eslint 9.0.0 9.0.0 10.12.0 node_modules/eslint menyu
nanoid 3.3.20 3.3.20 6.0.2 node_modules/nanoid menyu
picocolors 1.0.0 1.0.0 1.1.1 node_modules/picocolors menyu
prettier 3.0.0 3.0.0 3.9.10 node_modules/prettier menyuAniq versiyada Wanted doim Current ga teng — npm update hech narsa qilmaydi. Yangilash faqat ongli qaror bilan bo'ladi. Bu yaxshi, lekin bitta savolga javob yo'q: qaysi yangilash xavfsiz, qaysi biri xavfli?
2.2 npm-check-updates: turlarga ajratilgan ro'yxat
npm-check-updates (qisqasi ncu) — package.json dagi har paketning yangi versiyasini topib, uni semver turiga qarab guruhlaydigan vosita. O'rnatish shart emas, npx bilan:
npx npm-check-updates@23.1.0Checking …\menyu\package.json
Minor Backwards-compatible features
picocolors 1.0.0 → 1.1.1
prettier 3.0.0 → 3.9.10
Major Potentially breaking API changes
eslint 9.0.0 → 10.12.0
nanoid 3.3.20 → 6.0.2
Run npx npm-check-updates -u to upgrade package.jsonGuruh nomlari tarjimasi: "Minor — orqaga mos yangi imkoniyatlar", "Major — API'ni buzishi mumkin bo'lgan o'zgarishlar". Bu semver qoidasining o'zi: MAJOR raqam o'zgarsa, muallif "eski kodingiz ishlamasligi mumkin" deb ogohlantirmoqda.
npm outdated dan farqi: ncu faqat ko'rsatmaydi, -u bilan package.json ni ham o'zgartiradi. Lekin node_modules ga tegmaydi — keyin npm install kerak.
2.3 Foydali bayroqlar
Faqat xavfsizroq yangilashlar — --target minor (MAJOR'dan oshmaydi):
npx npm-check-updates@23.1.0 --target minorChecking …\menyu\package.json
Minor Backwards-compatible features
eslint 9.0.0 → 9.39.5
picocolors 1.0.0 → 1.1.1
prettier 3.0.0 → 3.9.10
Run npx npm-check-updates --target minor -u to upgrade package.jsonESLint ham ro'yxatga kirdi — 9.x qatorining oxirgisi 9.39.5. Ya'ni "10 ga o'tish qo'rqinchli" bo'lsa ham, 9 ning ichida 39 ta MINOR versiya kutib turibdi.
Oldingi darsdagi "yangi versiyani kutib tur" g'oyasi ncu'da ham bor — --cooldown (kunlarda):
npx npm-check-updates@23.1.0 --cooldown 7Checking …\menyu\package.json
Minor Backwards-compatible features
picocolors 1.0.0 → 1.1.1
prettier 3.0.0 → 3.9.9 [cooldown] 3.9.10
Major Potentially breaking API changes
eslint 9.0.0 → 10.12.0
nanoid 3.3.20 → 6.0.1 [cooldown] 6.0.2
Run npx npm-check-updates --cooldown 7 -u to upgrade package.json[cooldown] 3.9.10 — "eng yangisi 3.9.10, lekin u hali 7 kunlik emas, shuning uchun 3.9.9 taklif qilinadi". Prettier 3.9.10 shu kuni (2026-10-10) chiqqan edi.
| Bayroq | Nima qiladi | Sukut bo'yicha (bayroqsiz) |
|---|---|---|
-u |
package.json ni yangilaydi |
faqat ko'rsatadi, faylga tegmaydi |
--target minor / patch |
MAJOR (yoki MINOR) dan oshmaydi | latest — eng yangi versiya |
--cooldown 7 |
7 kundan yangi versiyani o'tkazib yuboradi | kutmaydi (0 kun) |
prettier eslint (filtr) |
faqat shu paketlar | hamma paketlar |
--doctor |
birma-bir yangilab, har birida testni yuritadi | testni yuritmaydi |
Tekshirib ko'ring:
npm outdatedva ncu ikkalasi ham "eskirgan" deydi. Sardor CI'ga qaysi birini qo'yishi kerak — "eskirgan paket bo'lsa, to'xta" uchun?
Javob
Hech birini. Yangi versiya har kuni chiqadi: CI kod o'zgarmasa ham qizil bo'lib qoladi, bu esa deploy'ni sababsiz to'xtatadi. "Eskirgan" — xato emas, vazifa. Uni avtomatik PR'lar (Dependabot, Renovate — pastda) yoki haftalik qo'lda ko'rib chiqish hal qiladi. CI'da faqat haqiqiy xavf to'xtatadi: testlar, npm audit signatures.
3. Changelog: nima o'zgargan?
3.1 Qayerdan o'qiladi
Changelog (o'zgarishlar ro'yxati) — har versiyada nima o'zgarganini yozib boradigan fayl, odatda CHANGELOG.md. Release notes — GitHub'dagi har versiya sahifasi (Releases), mazmuni o'xshash. Manzilni npm view beradi:
npm view nanoid repository.urlgit+https://github.com/ai/nanoid.gitRepoda CHANGELOG.md bor. nanoid ning 3 dan 6 gacha bo'lgan yo'li (asl inglizcha matndan qisqa tarjima):
| Versiya | Sana | Asosiy o'zgarish |
|---|---|---|
| 4.0 | 2022-06-08 | CommonJS olib tashlandi — faqat ESM; Node 10, 12 qo'llanmaydi |
| 5.0 | 2023-09-12 | Web Crypto API ga o'tdi; async API olib tashlandi |
| 6.0 | 2026-07-12 | 4 marta tezroq; Node 18 va 20 qo'llanmaydi |
| 6.0.2 | 2026-10-05 | tuzatishlar, bundle kichraydi |
Sanalar npm view nanoid time dan. Har MAJOR — breaking change (buzuvchi o'zgarish): eski kod ishlamay qolishi mumkin bo'lgan o'zgarish. Breaking change'lar changelog'da odatda "Removed", "Breaking", "Dropped support" so'zlari bilan boshlanadi.
3.2 O'z kodingiz bilan solishtirish
Changelog'ni o'qib, o'z kodingizda shu narsalarni qidirasiz. Sardorning buyurtma.js i:
// buyurtma.js — «Bahor» buyurtma raqami (nanoid 3 davrida)
import { customAlphabet } from "nanoid";
import { nanoid as nanoidAsync } from "nanoid/async";
const orderNumber = customAlphabet("0123456789", 6);
export async function createOrder(dish) {
const token = await nanoidAsync(); // kuzatuv havolasi uchun
return { number: orderNumber(), dish, token };
}Changelog'dagi uch breaking change'ni tekshiramiz:
- "Faqat ESM" 4.0-bob — bizda
import,"type": "module". Muammo yo'q. - "async API olib tashlandi" 5.0-bob — bizda bor:
nanoid/async. - "Node 18, 20 qo'llanmaydi" 6.0-bob — bizda Node 24.
npm view nanoid@6.0.2 engines—{ node: '^22 || ^24 || >=26' }. Muammo yo'q.
Demak, bitta joyni o'zgartirish kerak. Uni versiyani ko'tarishdan oldin qilamiz.
3.3 Changelog bo'lmasa
Har paket changelog yuritmaydi. Unda: GitHub Releases sahifasi, ikki versiya orasidagi farq (https://github.com/ai/nanoid/compare/3.3.20...6.0.2 ko'rinishidagi havola), oxirgi chora — paketning package.json idagi exports va engines ni solishtirish (npm view nanoid@6.0.2 exports). Changelog'siz, testsiz va mashhur bo'lmagan paket — Paket tanlash darsidagi "qizil bayroq".
Tekshirib ko'ring: Changelog'da "Removed Node.js 18 and 20 support" yozilgan. Sardorning kodi o'zgarmasa ham, bu uni qayerda qiynashi mumkin?
Javob
Kod emas — muhit. Agar CI yoki server hali Node 20 da bo'lsa, npm ci engines ga mos kelmaydi: engine-strict bilan xato, usiz — ogohlantirish va ehtimol ishlash paytidagi xato. vazifalar da .nvmrc — 24, shuning uchun bizga ta'sir qilmaydi. Lekin har MAJOR'da "qaysi Node kerak?" ni tekshirish odat bo'lsin.
4. MAJOR yangilash: tartib bilan
4.1 Avval testsiz nima bo'lishini ko'ramiz
Sardorda bitta test bor (buyurtma.test.js, node:test bilan): raqam 6 xonali, token 21 belgi. Hozir — yashil. Kodga tegmay, versiyani ko'taramiz:
npm i -E nanoid@6.0.2
npm testError [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './async' is not defined by "exports" in …\node_modules\nanoid\package.json imported from …\buyurtma.js
…
ℹ tests 1
ℹ pass 0
ℹ fail 1Uzun chiqishning faqat kerakli qatorlarini qoldirdik. Xato: "'./async' yo'li paketning exports ida belgilanmagan". Kirish nuqtalari darsidan bilasiz: exports — paket tashqariga nimani ochishini aytadigan maydon. 5.0 da async papkasi olib tashlangan.
Test bo'lmaganda bu xato saytda, buyurtma vaqtida chiqardi. Shuning uchun birinchi qoida: testsiz MAJOR yangilash — tavakkal.
4.2 To'g'ri tartib
flowchart TB
A["changelog: breaking<br/>change'lar ro'yxati"] --> B["kodni moslash<br/>(eski versiyada!)"]
B --> C["testlar yashil?"]
C --> D["versiyani ko'tarish<br/>npm i -E paket@yangi"]
D --> E["testlar, build, lint"]
E -->|yashil| F["alohida PR"]
E -->|qizil| BDiagrammaning eng muhim joyi — ikkinchi to'rtburchak. Kodni eski versiyadayoq moslashtiramiz. Agar shunda testlar yashil bo'lsa, versiyani ko'tarish xavfsiz va har qadamni alohida qaytarish mumkin.
Sinxron nanoid() 3-versiyada ham bor. Demak tuzatish ikki versiyada ham ishlaydi:
// buyurtma.js — nanoid 3 da ham, 6 da ham ishlaydi
import { customAlphabet, nanoid } from "nanoid";
const orderNumber = customAlphabet("0123456789", 6);
export async function createOrder(dish) {
const token = nanoid(); // 5.0 dan beri faqat sinxron
return { number: orderNumber(), dish, token };
}Avval nanoid 3.3.20 bilan npm test — pass 1. Keyin npm i -E nanoid@6.0.2 va yana npm test — pass 1. Ikki commit: "refactor: nanoid/async o'rniga sinxron nanoid" va "chore: nanoid 3.3.20 → 6.0.2". Biror narsa buzilsa, qaysi qadamda buzilgani darhol ko'rinadi.
4.3 ncu --doctor: aybdorni topish
Sardorning birinchi xatosiga qaytamiz: hammasi birdan yangilanib, testlar qizil bo'ldi. ncu'ning --doctor rejimi aynan shunday holat uchun. U avval hammasini yangilab ko'radi, yiqilsa — har paketni birma-bir sinaydi. Eski buyurtma.js (async bilan) da sinadik (chiqishdan faqat qadam qatorlari qoldirildi). Uzun chiqishda faqat ✗ va ✓ belgili qatorlarga qarang — qolgani ncu bajargan buyruqlar:
npx npm-check-updates@23.1.0 --doctor -uRunning tests before upgrading
npm install
npm run test
Upgrading all dependencies and re-running tests
ncu -u
npm install
npm run test
Tests failed
npm install
npm install --no-save nanoid@6.0.2
npm run test
✗ nanoid 3.3.20 → 6.0.2
npm install --no-save picocolors@1.1.1
npm run test
✓ picocolors 1.0.0 → 1.1.1
npm install --no-save eslint@10.12.0
npm run test
✓ eslint 9.0.0 → 10.12.0
npm install --no-save prettier@3.9.10
npm run test
✓ prettier 3.0.0 → 3.9.10
Saving partially upgraded package.json
npm installNima bo'ldi? Hammasi birga yangilanganda test yiqildi. Shunda ncu har paketni yolg'iz sinadi: nanoid bilan test qizil (✗), qolgan uchtasi bilan yashil (✓). Natija: package.json da nanoid 3.3.20 qoldi, qolgan uchtasi yangilandi. Aybdor topildi.
Lekin ✓ eslint 9.0.0 → 10.12.0 ga ishonmang. Testlarimiz ESLint'ni umuman ishlatmaydi — --doctor faqat npm test ni yuritadi. ESLint 10 ning o'zi buziladimi, buni testlar bilmaydi. Keyingi bo'limda ko'ramiz: buziladi.
Diqqat: Yashil test — "testlar tekshirgan narsa ishlaydi" degani.
--doctorva avtomatik PR'lar testlaringiz qanchalik to'liq bo'lsa, shunchalik foydali.vazifalardanpm run check(format, lint, tip, test) ning hammasi shuning uchun bitta buyruqda (scripts chuqur).
5. Codemod: kodni avtomatik moslash
5.1 ESLint 10 va eski config
Sardorning eski loyihasida ESLint sozlamasi .eslintrc.json faylida. ESLint 10 ni o'rnatib, ishga tushiramiz:
npx eslint .Oops! Something went wrong! :(
ESLint: 10.12.0
ESLint couldn't find an eslint.config.* file.
From ESLint v9.0.0, the default configuration file is now eslint.config.*.
If you are using a .eslintrc.* file, please follow the migration guide
to update your configuration file to the new format:
https://eslint.org/docs/latest/use/configure/migration-guide"ESLint eslint.config.* faylini topa olmadi. v9.0.0 dan sukut bo'yicha config — eslint.config.*. .eslintrc.* ishlatsangiz, ko'chish qo'llanmasiga qarang". ESLint 9 eski formatni hali o'qir edi, 10 da u butunlay olib tashlangan. Yangi format — ESLint I: flat config darsida.
5.2 Codemod nima
Codemod ("kod modifikatori") — kodni yoki config'ni avtomatik qayta yozadigan dastur. Kutubxona mualliflari MAJOR versiya bilan birga ko'pincha codemod ham chiqaradi: yuzlab faylda bir xil o'zgarishni qo'lda qilish o'rniga, bitta buyruq. Ichida ular kodni AST — daraxt ko'rinishiga o'girib, kerakli tugunlarni almashtiradi.
ESLint'ning rasmiy codemod'i — @eslint/migrate-config (3.0.3):
npx @eslint/migrate-config@3.0.3 .eslintrc.jsonMigrating .eslintrc.json
Wrote new config to ./eslint.config.mjs
You will need to install the following packages to use the new config:
- globals
- @eslint/js
- @eslint/eslintrc
You can install them using the following command:
npm install globals @eslint/js @eslint/eslintrc -DYangi eslint.config.mjs yozildi. Uning ichiga qarasangiz, FlatCompat degan "ko'prik" — eski formatni yangisiga moslaydigan qo'shimcha qatlam va 3 ta yangi paket bor. Ishlaydi, lekin chiroyli emas: qo'lda yozilgan flat config 10 qatorga sig'ardi.
Bu codemod'ning tabiati: u boshlanish nuqtasi, yakun emas. Natijani o'qing, soddalashtiring, testlarni yuriting va diff'ni ko'zdan kechiring. Mashhur codemod'lar: @eslint/migrate-config, React 19 uchun npx codemod react/19/migration-recipe, Next.js uchun npx @next/codemod. Ularni tegishli qismlarda uchratamiz.
Tekshirib ko'ring:
--doctorESLint 10 ni✓dedi, lekinnpx eslint .yiqildi. Sardor nima qilishi kerak edi, toki bu yangilash testda ushlansa?
Javob
npm test ichiga lint'ni ham qo'shish (yoki --doctorTest "npm run check" bilan doctor'ga to'liq tekshiruvni berish). vazifalar dagi check skripti aynan shunday: format, lint, tip va test. Yangilashni sinaydigan buyruq loyihaning hamma asbobini ishga tushirsin.
6. Avtomatik PR'lar: Dependabot va Renovate
6.1 G'oya
Har hafta ncu ni qo'lda yuritish — unutiladigan ish. GitHub'da buni robotlar qiladi. Ular registrni kuzatadi, yangi versiya chiqsa — branch ochib, package.json va lock'ni yangilab, PR yaratadi. CI testlarni yuritadi. Siz faqat ko'rib chiqasiz va qabul qilasiz.
flowchart LR
R["registrda<br/>yangi versiya"] --> B["robot: branch<br/>+ lock yangilandi"]
B --> P["PR: changelog<br/>havolasi bilan"]
P --> C["CI: npm run check"]
C -->|yashil| M["siz: ko'rib,<br/>merge"]
C -->|qizil| X["PR ochiq qoladi"]Ikki asosiy robot:
| Dependabot | Renovate | |
|---|---|---|
| Kimniki | GitHub'ning o'zi | Mend kompaniyasi, ochiq kod |
| Sozlash | .github/dependabot.yml |
renovate.json |
| Xavfsizlik PR'lari | ha (alohida, avtomatik) | ha |
| Moslashuvchanlik | yetarli | juda katta |
6.2 Dependabot config
Dependabot sozlamasi repodagi .github/dependabot.yml faylida. GitHub hujjatlaridagi maydonlar bilan vazifalar kabi loyiha uchun namuna:
# .github/dependabot.yml — har dushanba npm paketlarini tekshir
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
# yangi versiya kamida 7 kun "yashab ko'rsin"; MAJOR — 30 kun
cooldown:
default-days: 7
semver-major-days: 30
groups:
# dasturchi asboblarining minor va patch'lari — bitta PR
asboblar:
dependency-type: "development"
update-types: ["minor", "patch"]
open-pull-requests-limit: 5| Kalit | Nima qiladi | Sukut |
|---|---|---|
schedule.interval |
qanchalik tez-tez | majburiy (daily, weekly, monthly…) |
cooldown |
yangi versiyani kutish | yo'q |
groups |
bir nechta paketni bitta PR'ga | har paket — alohida PR |
open-pull-requests-limit |
bir vaqtda ochiq PR soni | 5 |
Guruhlash muhim. Guruhsiz 15 ta dasturchi asbobi 15 ta PR ochadi va jamoa ularni o'qimay qo'yadi. Guruh bilan — bitta "asboblar" PR'i, MAJOR'lar esa baribir alohida keladi. Xavfsizlik tuzatishlari (Dependabot security updates) bu jadvalni kutmaydi: zaiflik e'lon qilinishi bilan PR ochiladi.
6.3 Renovate config
Renovate ko'proq narsani sozlashga imkon beradi. Rasmiy hujjatlardagi kalitlar bilan namuna:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"schedule": ["before 6am on monday"],
"minimumReleaseAge": "7 days",
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"matchDepTypes": ["devDependencies"],
"groupName": "asboblar",
"automerge": true
}
]
}config:recommended— tayyor yaxshi sozlamalar to'plami.minimumReleaseAge— oldingi darsdagi kutish g'oyasi.automerge: true— CI yashil bo'lsa, PR'ni o'zi qo'shadi. Faqat dasturchi asboblarining MINOR/PATCH'iga — va faqat testlar kuchli bo'lsa.
Renovate yana bir qulaylik beradi: Dependency Dashboard — repodagi bitta issue, unda hamma kutilayotgan yangilashlar ro'yxati.
Diqqat:
automerge— qulay, lekin Ta'minot zanjiri darsini eslang: zararli versiya ham "yashil test" bilan keladi. Shuning uchunminimumReleaseAgeva avtomatik qo'shish doim birga ishlatiladi, va faqat brauzerga bormaydigan asboblarga.
6.4 vazifalar va robotlar
vazifalar ga robot qo'shmaymiz. Sabab: bizning pages.yml faqat main ga push'da ishlaydi — robot PR'larini tekshiradigan CI yo'q, testsiz avtomatik PR esa xavfli. Bundan tashqari, kurs kanoni aniq versiyalarga tayanadi. Lekin bugungi holatni qo'lda tekshiramiz:
npm outdatedPackage Current Wanted Latest Location Depended by
prettier 3.9.9 3.9.9 3.9.10 node_modules/prettier vazifalarKanon 2026-10-07 da yozilgan edi, Prettier 3.9.10 esa 2026-10-10 da chiqdi. Changelog'da bitta qator: Markdown jadvallarini tahlil qilish tuzatilgan. PATCH, ESM, engines o'zgarmagan. Sinov nusxasida npm i -D prettier@3.9.10 va npm run check — All matched files use Prettier code style!, ℹ tests 143, ℹ pass 143. Ya'ni yangilash xavfsiz. Kanon esa 3.9.9 da qoladi — kurs bir xil versiyalar bilan davom etishi uchun. Sizning loyihangizda bu yangilashni qilsangiz — to'g'ri ish qilgan bo'lasiz.
7. Strategiya: bir varaqda
| Yangilash turi | Qanchalik tez-tez | Qanday |
|---|---|---|
| Xavfsizlik tuzatishi | darhol | npm audit, robot PR'i |
| PATCH, MINOR (asboblar) | haftada | guruhlab bitta PR |
| PATCH, MINOR (brauzerga boradigan) | haftada | alohida PR, changelog'ga ko'z |
| MAJOR | rejali, bittadan | changelog → kod → versiya → test |
Yana uch qoida:
- Bitta PR — bitta MAJOR. Ikkitasi birga bo'lsa, qaysi biri buzganini topish qiyin.
- Lock-fayl ham commit qilinadi. Yangilash PR'ining asosiy qismi —
package-lock.json(Lock-fayllar). - Bog'liq paketlar birga. Masalan,
eslintva@eslint/js, yokiviteva uning plaginlari bir vaqtda yangilanadi — ular bir-biriningpeerDependenciesida.
8. Ko'p uchraydigan xatolar
| Xato | Oqibati | To'g'risi |
|---|---|---|
ncu -u && npm i — hammasi birdan |
qaysi paket buzgani noma'lum | guruhlab, MAJOR alohida |
| changelog o'qimasdan MAJOR | ishlash paytida xato | breaking change ro'yxati |
ncu -u dan keyin npm install unutildi |
package.json va node_modules farq qiladi |
npm install, lock commit |
| ikki yil yangilamaslik | "katta ko'chish", zaifliklar | haftalik kichik qadamlar |
Uchinchi xatoni npm buyruqlari darsidagi npm ls darhol ko'rsatadi: invalid: "10.12.0" from the root project.
9. Mashqlar
Mashqlar kurs/mashqlar/16/17-yangilash/ da.
1-mashq (oson): Turini ayting
npm outdated qatorlari bo'yicha yangilash turini yozing (patch, minor yoki major):
picocolors 1.0.0 → 1.1.1:prettier 3.9.9 → 3.9.10:nanoid 3.3.20 → 6.0.2:esbuild 0.27.0 → 0.28.2:
Yechim
Birinchi uchtasi semver bo'yicha: o'zgargan birinchi raqam turini belgilaydi. To'rtinchisi — tuzoq. Semver darsidan: 0.x versiyalarda MINOR raqam MAJOR kabi ishlaydi, chunki API hali barqaror emas. Shuning uchun ^0.27.0 0.28 ni olmaydi va esbuild'ning har 0.x MINOR'i — changelog o'qiladigan yangilash.
2-mashq (o'rta): Changelog tergovi
Prettier 3.0.0 dan 3.9.10 gacha yangilash rejalashtirilmoqda. npm view prettier repository.url bilan repoga o'ting, CHANGELOG.md ni oching.
- Bu MAJOR yangilashmi?
- Changelog'da "breaking" so'zi bilan belgilangan bo'lim bormi?
- Yangilashdan keyin
npm run format:checkqizil bo'lishi mumkinmi? Nega?
Yechim
- Yo'q — MINOR (3 → 3). Semver bo'yicha API orqaga mos.
- MINOR versiyalarda bo'lmasligi kerak — 3.x changelog'ida bo'limlar asosan yangi sintaksis qo'llanishi va formatlash tuzatishlari.
- Ha, mumkin. Prettier uchun "API" — buyruqlar va sozlamalar, ular o'zgarmaydi. Lekin formatlash qoidalarining o'zi MINOR'da biroz o'zgarishi mumkin: bir xil kod boshqacha formatlanadi. Shuning uchun Prettier yangilangach
npm run formatqilinadi va o'zgargan fayllar shu PR'ga qo'shiladi. Rasmiy hujjat ham Prettier'ni aniq versiyada (--save-exact) saqlashni tavsiya qiladi —vazifalardagi kabi.
3-mashq (qiyin): Yangilash rejasi
reja.mjs yozing. U npm outdated --json chiqishini o'qib, paketlarni turlarga ajratadi va reja chiqaradi: patch va minor — bitta PR guruhida, major — alohida.
updateType(from, to)—"patch","minor"yoki"major".0.xda MINOR o'zgarishi —"major".makePlan(outdated)—{ patch: [...], minor: [...], major: [...] }, har element"nom eski → yangi", har ro'yxat alifbo tartibida.
npm outdated --json ning bir yozuvi:
{
"nanoid": {
"current": "3.3.20",
"wanted": "3.3.20",
"latest": "6.0.2",
"dependent": "menyu",
"location": "node_modules/nanoid"
}
}Ishoralar: "3.9.10".split(".").map(Number) — [3, 9, 10] (massiv metodlari). Object.entries — kalit va qiymat juftlari. Faylni ishga tushirishda import.meta.main (oldingi dars mashqidagi kabi). Windows'da npm outdated --json > eskirgan.json — npm outdated 1 bilan tugasa ham fayl yoziladi.
Yechim
// reja.mjs — npm outdated --json → yangilash rejasi
// "3.0.0" va "3.9.10" → "minor"; MAJOR 0 bo'lsa, minor ham buzadi
export function updateType(from, to) {
const [a1, b1] = from.split(".").map(Number);
const [a2, b2] = to.split(".").map(Number);
if (a1 !== a2) return "major";
if (b1 !== b2) return a1 === 0 ? "major" : "minor";
return "patch";
}
export function makePlan(outdated) {
const plan = { patch: [], minor: [], major: [] };
for (const [name, info] of Object.entries(outdated)) {
const type = updateType(info.current, info.latest);
plan[type].push(`${name} ${info.current} → ${info.latest}`);
}
for (const list of Object.values(plan)) list.sort();
return plan;
}
// npm outdated --json > eskirgan.json; node reja.mjs eskirgan.json
if (import.meta.main) {
const { readFileSync } = await import("node:fs");
const file = process.argv[2] ?? "eskirgan.json";
const plan = makePlan(JSON.parse(readFileSync(file, "utf8")));
console.log("1-PR (patch + minor, bitta guruh):");
for (const line of [...plan.patch, ...plan.minor]) {
console.log(` ${line}`);
}
console.log("Alohida PR (major — changelog o'qing):");
for (const line of plan.major) console.log(` ${line}`);
}Sinov uchun updateType ni tekshiring: "3.9.9"→"3.9.10" — patch, "0.27.0"→"0.28.2" — major. Ikkita test bilan node --test reja.test.mjs — ℹ tests 2, ℹ pass 2, ℹ fail 0. Sardorning loyihasida:
npm outdated --json > eskirgan.json
node reja.mjs eskirgan.json1-PR (patch + minor, bitta guruh):
picocolors 1.0.0 → 1.1.1
prettier 3.0.0 → 3.9.10
Alohida PR (major — changelog o'qing):
eslint 9.0.0 → 10.12.0
nanoid 3.3.20 → 6.0.2Bu — Dependabot groups bilan qiladigan ishning kichik nusxasi. Murakkablashtirish: latest o'rniga wanted ham hisobga olinsin yoki -pre, -beta versiyalar alohida ro'yxatga tushsin.
4-mashq: Amaliy tajriba — o'z loyihangizda
O'z vazifalar loyihangizda (yoki portfolio loyihangizda):
npm outdatedvanpx npm-check-updates@23.1.0 --cooldown 7ni yuriting, farqini yozing.- Bitta PATCH yoki MINOR yangilashni tanlang: changelog'ini o'qing, yangi branch'da
npm i -E paket@versiya,npm run check. - Hammasi yashil bo'lsa — commit sarlavhasi
chore: <paket> <eski> → <yangi>(masalanchore: prettier 3.9.9 → 3.9.10).
Yechim
2026-10-10 holatida vazifalar da yagona eskirgan paket — Prettier (3.9.9 → 3.9.10), --cooldown 7 bilan esa ncu hech narsa taklif qilmaydi: 3.9.10 bir kunlik. Bu farqning o'zi — darsning saboqlaridan biri.
Yangilash va tekshiruv:
git switch -c chore/prettier-3.9.10
npm i -D -E prettier@3.9.10
npm run checknpm run check ichida All matched files use Prettier code style! va ℹ pass 143 — yashil. Keyin git add package.json package-lock.json va commit. Agar format:check qizil bo'lsa — npm run format, o'zgargan fayllarni shu commit'ga qo'shing va commit xabarida ayting.
Bu tajriba — mashq: kurs kanoni 3.9.9 da qoladi. Kursning keyingi darslarida chiqishlar bilan solishtirsangiz, versiya farqini hisobga oling.
10. Real ishda
- Ko'p kompaniyada dushanba kuni Renovate yoki Dependabot PR'lari keladi va jamoadan bittasi ularni "navbatchi" sifatida ko'rib chiqadi.
- MAJOR migratsiya — alohida vazifa (ticket): React 18 → 19, ESLint 8 → 9 kabi o'tishlar bir necha kun olishi mumkin, codemod va qo'llanma bilan.
- Intervyu savollari: "Paketlarni qanday yangilaysiz?", "Breaking change'ni qanday aniqlaysiz?", "Dependabot va Renovate farqi?", "Nega hamma paketni birdan yangilamaslik kerak?".
Xulosa
- Yangilamaslik ham, hammasini birdan yangilash ham xavfli — kichik, muntazam qadamlar arzon.
npm outdated— ma'lumot;npx npm-check-updates— semver turiga ajratadi,--target minor,--cooldown,--doctorbilan.- MAJOR: changelog'dan breaking change'lar → kodni eski versiyada moslash → versiyani ko'tarish →
npm run check→ alohida PR. - Codemod (
@eslint/migrate-config) — boshlanish nuqtasi, natija o'qiladi va soddalashtiriladi. - Dependabot (
dependabot.yml) va Renovate (renovate.json) — avtomatik PR'lar: guruhlar, jadval,cooldown/minimumReleaseAge;automerge— faqat kuchli testlar bilan.
Keyingi dars: Begona paketni tuzatish: patch-package, overrides va link — kutubxonada xato bor, tuzatish esa hali chiqmagan: uni fork qilmasdan vaqtincha qanday yamash mumkin.
Manbalar
- npm-check-updates — github.com/raineorshine/npm-check-updates (README:
--target,--cooldown,--doctor) - GitHub Docs: "Dependabot options reference" (
groups,cooldown,schedule,open-pull-requests-limit) — docs.github.com/code-security/dependabot - Renovate Docs: "Configuration options" (
extends,schedule,minimumReleaseAge,packageRules,automerge), "Dependency Dashboard" — docs.renovatebot.com - nanoid CHANGELOG — github.com/ai/nanoid/blob/main/CHANGELOG.md
- ESLint: "Configuration Migration Guide",
@eslint/migrate-config— eslint.org/docs/latest/use/configure/migration-guide - Prettier: "Install" (
--save-exacttavsiyasi) — prettier.io/docs/install
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!