pub: asosiy tushunchalar, Dart paket menejeri va pubspec.yaml

Muallif: IT Sectr Nashr etilgan: 2026-02-13 O'qish vaqti: 14 daq

pub — Dart tili va Flutter SDK uchun rasmiy paket menejeri. U uchinchi tomon kutubxonalarini yuklash, o'rnatish, yangilash va o'chirish, bog'liqlik versiyalarini boshqarish va o'z paketlaringizni nashr qilishni avtomatlashtiradi. Markaziy repozitoriy — pub.dev, unda 50 000 dan ortiq paket joylashgan. Loyiha konfiguratsiyasi pubspec.yaml faylida tavsiflanadi.

Asosiy ma'lumotlar

  • pub — Dart/Flutter-ga o'rnatilgan paket menejeri, JavaScript uchun npm yoki Python uchun pip analogi
  • pubspec.yaml — metadata, bog'liqliklar va SDK cheklovlari bilan yagona konfiguratsiya fayli
  • pub.dev — ochiq paketlar, mashhurlik tahlili, moslik ballari bilan rasmiy reestr
  • Semantic Versioning — pub caret va tilde diapazonlari bilan qat'iy versiyalashdan foydalanadi
  • Lock-faylpubspec.lock takrorlanuvchi qurilish uchun aniq versiyalarni belgilaydi

Pub nima?

pub (Package Universal Browser) — Dart SDK bilan birga keladigan o'rnatilgan paket menejeri. U tashqi kutubxonalarni boshqaradi, versiya nizolarini hal qiladi, tranzitiv bog'liqliklarni yuklaydi va paketlarni lokal keshlaydi. Flutter ekotizimida pub navigatsiya plaginlari, HTTP mijozlari, state menejerlari va boshqa komponentlarni ulash uchun asosiy vosita sifatida ishlatiladi.

Pub ning asosiy funktsiyalari: pub.dev reestridan bog'liqliklarni o'rnatish, lokal yo'llar (path-bog'liqliklari) va git-repozitoriyalari; semantik versiyalash qoidalariga muvofiq versiyalarni hal qilish; yuklangan paketlarni tizim katalogida keshlash; o'z paketlaringizni ochiq reestrda nashr qilish. Barcha operatsiyalar CLI buyrug'i dart pub yoki ekvivalent flutter pub orqali mavjud.

Pub arxitekturasi yopiq bog'liqlik grafigiga asoslanadi: menejer har bir paket aniq bir marta mavjud bo'lgan daraxtni quradi. Agar ikkita kutubxona bir paketning turli versiyalarini talab qilsa, pub mos diapazon topishga harakat qiladi yoki nizo xatosi haqida xabar beradi. Bu daraxtning turli tugunlarida bir paketning bir nechta versiyalariga ruxsat beruvchi npm yondashuvidan farq qiladi.

pubspec.yaml tuzilmasi

pubspec.yaml fayli — har qanday Dart yoki Flutter loyihasining markaziy konfiguratsiya faylidir. U YAML formatida yoziladi va metadata, bog'liqliklar, qurilish konfiguratsiyasi va SDK cheklovlarini o'z ichiga oladi. Quyida Flutter ilovasi uchun odatiy misol keltirilgan:

yaml
name: my_app
description: Flutter ilovasiga misol
version: 1.0.0+1
publish_to: none

environment:
  sdk: ">=3.0.0 <4.0.0"
  flutter: ">=3.10.0"

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0
  provider: ^6.0.5
  shared_preferences: ^2.2.0
  path_provider: ^2.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0
  mockito: ^5.4.3

flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/fonts/

pubspec.yaml ning asosiy maydonlari: name — paketning noyob nomi (faqat lotin harflari, pastki chiziq, raqamlar); description — qisqa tavsif (nashr qilish uchun majburiy); version — ortiqcha belgisidan keyin ixtiyoriy qurilish raqami bilan semantik versiya; environment — Dart SDK va Flutter SDK ning minimal versiyalari; dependencies — ilovaning asosiy bog'liqliklari; dev_dependencies — faqat ishlab chiqish va test uchun bog'liqliklar; flutter — Flutter konfiguratsiya bo'limi (assets, fonts, plugins).

publish_to maydoni nashr qilish imkoniyatini boshqaradi: none qiymati nashrni taqiqlaydi (ilovalar uchun odatiy), standart qiymat — https://pub.dev. dependency_overrides maydoni nizo holatida paket versiyasini majburiy o'zgartirishga imkon beradi — ehtiyotkorlik bilan, faqat vaqtinchalik yechim uchun foydalaning.

Bog'liqliklar va ularning turlari

pub to'rt turdagi bog'liqliklarni qo'llab-quvvatlaydi, har biri pubspec.yaml ichida o'z sintaksisiga ega:

Reestr (hosted)

Standart tur — paket pub.dev yoki boshqa mos reestrdan yuklanadi. Paket nomi va versiyasi ko'rsatiladi. Misol: http: ^1.1.0 caret-versiyalash qoidalariga muvofiq >=1.1.0 va <2.0.0 diapazonidan eng so'nggi mos versiyani yuklaydi.

SDK bog'liqliklari

Flutter SDK yoki Dart SDK ni ulash uchun ishlatiladi. Sintaksis: flutter: sdk: flutter. Paket reestrdan emas, Flutter SDK ning lokal o'rnatilishidan olinadi. SDK bog'liqliklari versiyalanmaydi — ularning versiyasi joriy o'rnatilgan Flutter versiyasi bilan belgilanadi.

Yo'l (path)

Paket bilan lokal katalogni ko'rsatadi. Kutubxonani ishlab chiqishda va nashr qilmasdan sinovdan o'tkazishda foydali. Sintaksis:

yaml
dependencies:
  my_local_lib:
    path: ../my_local_lib

Yo'l bog'liqliklari pubspec.lock da qayd etilmaydi — har bir yangilanish ko'rsatilgan yo'ldan qayta hal qilinadi.

Git bog'liqliklari

Paketni to'g'ridan-to'g'ri git-repozitoriyadan ulash imkonini beradi. Tarmoqlar, teglar va commitlar qo'llab-quvvatlanadi:

yaml
dependencies:
  my_git_lib:
    git:
      url: https://github.com/user/my_git_lib.git
      ref: main

Git bog'liqliklari fork-lar, nashr qilinmagan tuzatishlar yoki Pull Request ustida ishlash uchun qulay. Qurilishda kutilmagan o'zgarishlarning oldini olish uchun tarmoq o'rniga aniq teg yoki commit ko'rsatish tavsiya etiladi.

Versiyalash va diapazonlar

pub Semantic Versioning 2.0 ga qat'iy rioya qiladi: format MAJOR.MINOR.PATCH, bu yerda MAJOR — mos kelmaydigan o'zgarishlar, MINOR — orqaga mos qo'shimchalar, PATCH — orqaga mos tuzatishlar. Ushbu sxema asosida pub paketlarning mosligini aniqlaydi va nizolarni hal qiladi.

Versiyalarni belgilash uchun pubspec.yaml da uchta asosiy operator ishlatiladi:

  • Caret (^)^1.2.3 >=1.2.3 va <2.0.0 ga ekvivalent. Eng keng tarqalgan operator, chunki asosiy versiya doirasida moslikni nazarda tutadi. Asosiy versiyasi 0 (nol) bo'lgan paketlar uchun — ^0.1.2 >=0.1.2 va <0.2.0 degani, bu beqaror versiyalar uchun SemVer qoidalariga mos keladi.
  • Tilde (~)~1.2.3 >=1.2.3 va <1.3.0 ga ekvivalent. Kichik versiyani mahkamlaydi, faqat patch yangilanishlariga ruxsat beradi. Kamroq ishlatiladi, asosan kichik versiya darajasida nomoslik ma'lum bo'lganda.
  • Aniq diapazon>=1.2.0 <2.0.0 — to'liq nazorat beruvchi ochiq yozuv. Murakkab cheklovlar uchun foydali, masalan, tranzitiv bog'liqliklarning bir nechta versiyalaridan foydalanganda.

dart pub get bajarilgandan so'ng, pub barcha hal qilingan paketlarning (to'g'ridan-to'g'ri va tranzitiv) aniq versiyalarini belgilovchi pubspec.lock faylini yaratadi. Bu fayl barcha mashinalarda takrorlanuvchi qurilishlarni ta'minlash uchun versiyani boshqarish tizimiga kiritilishi kerak. dart pub upgrade bajarilganda, lock-fayl belgilangan cheklovlar doirasida eng so'nggi mos versiyalarga yangilanadi.

dependency conflict xatosi ikki paket bir bog'liqlikning bir-biriga mos kelmaydigan diapazonlarini talab qilganda yuzaga keladi. pub qaysi paketlar nizoga kirganini va qanday sabab bilan ekanini xabar qiladi. Yechim: nizodagi paketlardan birini mos versiyaga yangilash, dependency_overrides dan foydalanish (vaqtinchalik chora) yoki paketni alternativ bilan almashtirish.

Pub ning asosiy buyruqlari

Barcha pub operatsiyalari yagona CLI interfeysi orqali bajariladi. Dart SDK da dart pub buyrug'i, Flutter SDK da — ekvivalent flutter pub (qo'shimcha ravishda Flutter SDK bog'liqliklari va plaginlarini hisobga oladi) ishlatiladi. Quyida asosiy buyruqlar keltirilgan:

  • dart pub getpubspec.yaml da ko'rsatilgan barcha bog'liqliklarni yuklaydi, versiyalarni hal qiladi va pubspec.lock yaratadi/yangilaydi. Loyiha birinchi marta klonlanganda yoki bog'liqliklar o'zgartirilganda bajariladi.
  • dart pub upgrade — barcha bog'liqliklarni pubspec.yaml cheklovlari doirasida eng so'nggi versiyalarga yangilaydi va pubspec.lock ni qayta yozadi. Bitta paketni yangilash mumkin: dart pub upgrade http.
  • dart pub add <package>pubspec.yaml ga yangi bog'liqlik qo'shadi va darhol pub get ni bajaradi. Misol: dart pub add dio dio paketining eng so'nggi versiyasini qo'shadi.
  • dart pub remove <package> — bog'liqlikni pubspec.yaml dan olib tashlaydi va grafikni qayta hal qilishni boshlaydi.
  • dart pub cache repair — barcha keshlangan paketlarni qayta yuklaydi. Lokal keshning buzilishi yoki tekshirish summasi xatolarida yordam beradi.
  • dart pub deps — bog'liqlik daraxtini qulay matn formatida ko'rsatadi. Tranzitiv bog'liqliklarni tahlil qilish va takrorlanishlarni topish uchun foydali.
  • dart pub publish — joriy paketni pub.dev da nashr qiladi. Nashrdan oldin pubspec.yaml ning to'g'riligini, litsenziya va tavsifni tekshiradi.
  • dart pub outdated — joriy, istalgan va eng so'nggi mavjud versiyani ko'rsatadigan eskirgan bog'liqliklar ro'yxatini chiqaradi. npm outdated analogi.

Barcha buyruqlar qisqartirilgan shaklda ham mavjud: dart pub getdart pub g sifatida (barcha qisqartmalar emas). Flutter loyihalarida pub buyruqlaridan oldin flutter prefiksi qo'shiladi: flutter pub get, flutter pub add va h.k. Flutter versiyasi qo'shimcha ravishda plaginlarning maqsadli platforma bilan mosligini tekshiradi.

pub.dev da nashr qilish

pub.dev — Dart va Flutter ekotizimining markaziy paket reestridir. 2025 yil yanvar holatiga ko'ra, u yerda 50 000 dan ortiq paket nashr qilingan, jami 10 milliard martadan ko'proq yuklab olingan. Har bir paket tavsif, hujjatlar, mashhurlik reytinglari (Popularity), Pub Points ballari va versiyalar bilan sahifaga ega.

Pub Points — 0 dan 130 gacha ball bilan paket sifatini avtomatik baholash tizimi. Hisobga olinadi: litsenziya mavjudligi, tavsif, misollar, Dart ning so'nggi barqaror versiyasi bilan moslik, zaifliklarning yo'qligi, test qamrovi, formatlashning to'g'riligi. Yuqori ball paketning qidiruvda ko'rinishini va foydalanuvchi ishonchini oshiradi.

Nashr qilish jarayoni bir necha bosqichni o'z ichiga oladi:

  1. pubspec.yaml ni tekshiring: name, description, version, license (SPDX identifikatorini ko'rsatish tavsiya etiladi, mas. MIT).
  2. dart pub publish --dry-run ni ishga tushiring — serverga yubormasdan nashr simulyatsiyasi, paketga kiritiladigan barcha fayllar va mumkin bo'lgan xatolarni ko'rsatadi.
  3. Birinchi nashrda Google hisobi orqali avtorizatsiyadan o'ting: dart pub publish brauzerni OAuth autentifikatsiyasi uchun ochadi.
  4. Terminalda nashrni tasdiqlang. Muvaffaqiyatli jo'natishdan so'ng paket bir necha daqiqa ichida pub.dev da paydo bo'ladi.

Muhim qoidalar: faqat noyob nomga ega paketlar nashr qilinishi mumkin; bir marta nashr qilingan versiyani o'chirib bo'lmaydi (faqat yashirish mumkin — dart pub unpublish — 7 kun ichida); katta yangilanishlar uchun Semantic Versioning qoidalariga rioya qilish, asosiy versiyani o'zgartirmasdan umumiy API ni buzmaslik kerak.

Tez-tez beriladigan savollar

dart pub get va dart pub upgrade o'rtasidagi farq nima?

pub get mavjud pubspec.lock dan versiyalarni yuklaydi, uni o'zgartirmagan holda (lock-fayl mavjud bo'lmasa — yaratadi). pub upgrade lock-faylni hisobga olmaydi va barcha bog'liqliklarni eng so'nggi mos diapazon bo'yicha qayta hal qiladi, so'ngra lock-faylni qayta yozadi.

pubspec.yaml da lokal bog'liqlikni qanday ko'rsatish mumkin?

Path bog'liqligidan foydalaning: dependencies: my_package: path: ../my_package. Yo'l loyiha ildiziga nisbatan ko'rsatiladi. Bunday bog'liqlik pubspec.lock da qayd etilmaydi — har bir qurilishda pub katalogning joriy mazmunini oladi.

Dependency conflict xatosi bilan nima qilish kerak?

Nizodagi paketlarni bir-biriga mos keladigan diapazonli versiyalarga yangilang. Agar imkonsiz bo'lsa — vaqtinchalik pubspec.yaml da dependency_overrides dan foydalaning yoki paketlardan birini alternativ bilan almashtiring. Bog'liqlik daraxtini ko'rish uchun dart pub deps ni ishga tushirish foydali.

Nega pubspec.lock repozitoriyada kerak?

pubspec.lock barcha bog'liqliklarning (to'g'ridan-to'g'ri va tranzitiv) aniq versiyalarini belgilaydi va barcha ishlab chiquvchi mashinalarida va CI/CD da takrorlanuvchi qurilishni ta'minlaydi. Usiz har bir pub get bajarilishi yangi patch versiyalarining chiqishi tufayli biroz boshqacha versiyalarni tanlashi mumkin.

Paketni pub.dev da qanday nashr qilish mumkin?

Dastlabki tekshirish uchun dart pub publish --dry-run, so'ngra dart pub publish ni bajaring. Birinchi nashrda Google orqali avtorizatsiya talab qilinadi. Paket noyob nom, tavsif, litsenziya va to'g'ri versiyaga ega bo'lishi kerak.

Pub Points nima va ularni qanday yaxshilash mumkin?

Pub Points — 0 dan 130 gacha sifatni baholash tizimi. Litsenziya (MIT, Apache-2.0), kengaytirilgan tavsif, foydalanish misollari, testlar qo'shish, Dart ning so'nggi versiyasi bilan moslikni saqlash va analizatorning sintaktik izohlarini tuzatish orqali ballarni yaxshilash mumkin.

Xulosa

  • pub — kutubxonalarni o'rnatish, yangilash va nashr qilish uchun o'rnatilgan Dart/Flutter paket menejeri
  • pubspec.yaml — bog'liqliklar, metadata va SDK cheklovlari bilan markaziy konfiguratsiya fayli
  • pub.dev — 50 000 dan ortiq paket, Pub Points tizimi va mashhurlik tahlili bilan rasmiy reestr
  • To'rt turdagi bog'liqlik — reestr (hosted), SDK, yo'l (path) va git bog'liqliklari barcha ulanish stsenariylarini qamrab oladi
  • SemVer va lock-fayl — qat'iy semantik versiyalash + pubspec.lock qurilishlarning takrorlanuvchanligini kafolatlaydi
  • Sakkizta asosiy buyruqpub get dan pub publish gacha paket boshqaruvining to'liq hayot aylanishini qamrab oladi
  • dependency_overrides — ehtiyotkorlik bilan qo'llashni talab qiluvchi majburiy nizolarni hal qilish mexanizmi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing