pub — Dart زبان اور Flutter SDK کے لیے سرکاری پیکیج مینیجر۔ یہ تیسری پارٹی کی لائبریریوں کو ڈاؤن لوڈ، انسٹال، اپ ڈیٹ اور ہٹانے، انحصار کے ورژن کا انتظام اور اپنے پیکیج شائع کرنے کو خودکار بناتا ہے۔ مرکزی ذخیرہ pub.dev ہے، جہاں 50,000 سے زیادہ پیکیج موجود ہیں۔ پروجیکٹ کنفیگریشن pubspec.yaml فائل میں بیان کی گئی ہے۔
اہم نکات
npm یا Python کے pip کے مشابہpubspec.lock دوبارہ قابل تولید بلڈ کے لیے درست ورژن طے کرتی ہےpub (Package Universal Browser) — ایک بلٹ ان پیکیج مینیجر جو Dart SDK کے ساتھ آتا ہے۔ یہ بیرونی لائبریریوں کا انتظام کرتا ہے، ورژن تنازعات حل کرتا ہے، عبوری انحصار ڈاؤن لوڈ کرتا ہے اور پیکیجز کو مقامی طور پر کیش کرتا ہے۔ Flutter ایکو سسٹم میں، pub نیویگیشن پلگ ان، HTTP کلائنٹ، اسٹیٹ مینیجر اور دیگر اجزاء کو منسلک کرنے کے لیے اہم ٹول کے طور پر استعمال ہوتا ہے۔
pub کے اہم افعال میں شامل ہیں: pub.dev رجسٹری سے انحصار انسٹال کرنا، مقامی راستے (پاتھ انحصار) اور git ریپوزٹریز؛ معنوی ورژننگ قواعد کے مطابق ورژن حل کرنا؛ سسٹم ڈائریکٹری میں ڈاؤن لوڈ کردہ پیکیجز کا کیشنگ؛ عوامی رجسٹری میں اپنے پیکیجز کی اشاعت۔ یہ تمام آپریشنز CLI کمانڈ dart pub یا اس کے مساوی flutter pub کے ذریعے دستیاب ہیں۔
pub کا فن تعمیر بند انحصار گراف پر مبنی ہے: مینیجر ایک درخت بناتا ہے جہاں ہر پیکیج صرف ایک بار ظاہر ہوتا ہے۔ اگر دو لائبریریاں ایک ہی پیکیج کے مختلف ورژن مانگیں تو pub ایک مطابقت پذیر رینج تلاش کرنے کی کوشش کرتا ہے یا تنازع کی اطلاع دیتا ہے۔ یہ npm کے طریقہ کار سے مختلف ہے، جو مختلف درخت نوڈس میں ایک ہی پیکیج کے متعدد ورژن کی اجازت دیتا ہے۔
pubspec.yaml فائل — کسی بھی Dart یا Flutter پروجیکٹ کی مرکزی کنفیگریشن فائل۔ یہ YAML فارمیٹ میں لکھی جاتی ہے اور اس میں میٹا ڈیٹا، انحصار، بلڈ کنفیگریشن اور SDK پابندیاں ہوتی ہیں۔ ذیل میں Flutter ایپلیکیشن کے لیے ایک عام مثال ہے:
name: my_app
description: Flutter ایپلیکیشن کی مثال
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 کے اہم فیلڈز: name — منفرد پیکیج نام (صرف لاطینی، زیریں خط، ہندسے)؛ description — مختصر وضاحت (اشاعت کے لیے لازمی)؛ version — جمع کے نشان کے بعد اختیاری بلڈ نمبر کے ساتھ معنوی ورژن؛ environment — کم از کم Dart SDK اور Flutter SDK ورژن؛ dependencies — اہم ایپلیکیشن انحصار؛ dev_dependencies — صرف ترقی اور جانچ کے لیے انحصار؛ flutter — Flutter کنفیگریشن سیکشن (اثاثے، فونٹس، پلگ انز)۔
publish_to فیلڈ اشاعت کی دستیابی کو کنٹرول کرتا ہے: قدر none اشاعت منع کرتی ہے (ایپلیکیشنز کے لیے عام)، ڈیفالٹ قدر — https://pub.dev۔ dependency_overrides فیلڈ تنازع کی صورتوں میں پیکیج ورژن کو زبردستی اوور رائڈ کرنے کی اجازت دیتا ہے — احتیاط سے استعمال کریں، صرف عارضی حل کے طور پر۔
pub چار قسم کے انحصار کو سپورٹ کرتا ہے، ہر ایک pubspec.yaml کے اندر اپنے نحو کے ساتھ متعین کیا جاتا ہے:
معیاری قسم — پیکیج pub.dev رجسٹری یا کسی اور مطابقت پذیر رجسٹری سے ڈاؤن لوڈ کیا جاتا ہے۔ پیکیج کا نام اور ورژن بتایا جاتا ہے۔ مثال: http: ^1.1.0 caret ورژننگ قواعد کے مطابق رینج >=1.1.0 اور <2.0.0 سے تازہ ترین مطابقت پذیر ورژن ڈاؤن لوڈ کرے گا۔
Flutter SDK یا Dart SDK کو شامل کرنے کے لیے استعمال ہوتے ہیں۔ نحو: flutter: sdk: flutter۔ پیکیج رجسٹری سے نہیں بلکہ مقامی Flutter SDK انسٹالیشن سے لیا جاتا ہے۔ SDK انحصار ورژن نہیں ہوتے — ان کا ورژن موجودہ انسٹال کردہ Flutter ورژن سے متعین ہوتا ہے۔
پیکیج پر مشتمل مقامی ڈائریکٹری کی طرف اشارہ کرتا ہے۔ اشاعت کے بغیر لائبریری تیار کرتے اور جانچ کرتے وقت مفید۔ نحو:
dependencies:
my_local_lib:
path: ../my_local_libراستہ انحصار pubspec.lock میں طے نہیں ہوتے — ہر اپ ڈیٹ متعین راستے سے دوبارہ حل ہوتا ہے۔
پیکیج کو براہ راست git ریپوزٹری سے شامل کرنے کی اجازت دیتا ہے۔ شاخیں، ٹیگز اور کامٹس تعاون یافتہ ہیں:
dependencies:
my_git_lib:
git:
url: https://github.com/user/my_git_lib.git
ref: mainGit انحصار فورکس، غیر شائع شدہ اصلاحات یا Pull Requests پر کام کرنے کے لیے آسان ہیں۔ بلڈ کے دوران غیر متوقع تبدیلیوں سے بچنے کے لیے شاخ کے بجائے ایک مخصوص ٹیگ یا کامٹ بتانے کی سفارش کی جاتی ہے۔
pub Semantic Versioning 2.0 کی سختی سے پیروی کرتا ہے: فارمیٹ MAJOR.MINOR.PATCH، جہاں MAJOR — غیر مطابقت پذیر تبدیلیاں، MINOR — پسماندہ مطابقت پذیر اضافے، PATCH — پسماندہ مطابقت پذیر اصلاحات۔ اس اسکیم کی بنیاد پر، pub پیکیج کی مطابقت کا تعین کرتا ہے اور تنازعات حل کرتا ہے۔
pubspec.yaml میں ورژن متعین کرنے کے لیے تین اہم آپریٹرز استعمال ہوتے ہیں:
^1.2.3 >=1.2.3 اور <2.0.0 کے برابر ہے۔ سب سے عام آپریٹر، کیونکہ یہ بڑے ورژن کے اندر مطابقت ظاہر کرتا ہے۔ بڑے ورژن 0 (صفر) والے پیکیج کے لیے — ^0.1.2 کا مطلب >=0.1.2 اور <0.2.0 ہے، جو غیر مستحکم ورژنز کے لیے SemVer قواعد پر عمل کرتا ہے۔~1.2.3 >=1.2.3 اور <1.3.0 کے برابر ہے۔ معمولی ورژن طے کرتا ہے، صرف پیچ اپ ڈیٹس کی اجازت دیتا ہے۔ کم استعمال ہوتا ہے، بنیادی طور پر جب معمولی ورژن سطح پر عدم مطابقت معلوم ہو۔>=1.2.0 <2.0.0 — واضح اشارہ جو مکمل کنٹرول دیتا ہے۔ پیچیدہ پابندیوں کے لیے مفید، مثال کے طور پر عبوری انحصار کے متعدد ورژن استعمال کرتے وقت۔dart pub get چلانے کے بعد، pub ایک pubspec.lock فائل تیار کرتا ہے جو تمام حل شدہ پیکیجز (براہ راست اور عبوری) کے عین ورژن طے کرتی ہے۔ تمام مشینوں پر دوبارہ قابل تولید بلڈ کو یقینی بنانے کے لیے اس فائل کو ورژن کنٹرول میں شامل کرنا ضروری ہے۔ dart pub upgrade چلانے پر، لاک فائل متعین پابندیوں کے اندر تازہ ترین مطابقت پذیر ورژن میں اپ ڈیٹ ہو جاتی ہے۔
انحصار تنازع کی غلطی اس وقت ہوتی ہے جب دو پیکیج ایک ہی انحصار کی غیر متداخل رینجز کا مطالبہ کریں۔ pub اطلاع دیتا ہے کہ کون سے پیکیج تنازع میں ہیں اور کیوں۔ حل: تنازع کرنے والے پیکیج میں سے ایک کو مطابقت پذیر ورژن میں اپ ڈیٹ کریں، dependency_overrides (عارضی اقدام) استعمال کریں یا متبادل پیکیج پر سوئچ کریں۔
تمام pub آپریشنز متحد CLI انٹرفیس کے ذریعے انجام دیے جاتے ہیں۔ Dart SDK کمانڈ dart pub استعمال کرتا ہے، Flutter SDK مساوی flutter pub استعمال کرتا ہے (اضافی طور پر Flutter SDK انحصار اور پلگ ان کو مدنظر رکھتا ہے)۔ اہم کمانڈز ذیل میں دیے گئے ہیں:
dart pub get — pubspec.yaml میں متعین تمام انحصار ڈاؤن لوڈ کرتا ہے، ورژن حل کرتا ہے اور pubspec.lock بناتا/اپ ڈیٹ کرتا ہے۔ پروجیکٹ کو پہلی بار کلون کرنے یا انحصار تبدیل کرنے کے بعد چلائیں۔dart pub upgrade — تمام انحصار کو pubspec.yaml کی پابندیوں کے اندر تازہ ترین ورژن میں اپ ڈیٹ کرتا ہے اور pubspec.lock کو اوور رائڈ کرتا ہے۔ ایک فرد پیکیج اپ ڈیٹ کیا جا سکتا ہے: dart pub upgrade http۔dart pub add <package> — pubspec.yaml میں نیا انحصار شامل کرتا ہے اور فوری طور پر pub get چلاتا ہے۔ مثال: dart pub add dio dio پیکیج کا تازہ ترین ورژن شامل کرتا ہے۔dart pub remove <package> — pubspec.yaml سے انحصار ہٹاتا ہے اور گراف حل دوبارہ شروع کرتا ہے۔dart pub cache repair — تمام کیش شدہ پیکیج دوبارہ لوڈ کرتا ہے۔ مقامی کیش خراب ہونے یا چیکسم غلطیوں پر مدد کرتا ہے۔dart pub deps — انحصار کے درخت کو آسان متن کی شکل میں پرنٹ کرتا ہے۔ عبوری انحصار کے تجزیہ اور ڈپلیکیٹ تلاش کرنے کے لیے مفید۔dart pub publish — موجودہ پیکیج کو pub.dev پر شائع کرتا ہے۔ اشاعت سے پہلے pubspec.yaml، لائسنس اور وضاحت کی تصدیق کرتا ہے۔dart pub outdated — موجودہ، مطلوبہ اور تازہ ترین دستیاب ورژن بتاتے ہوئے پرانے انحصار کی فہرست دکھاتا ہے۔ npm outdated سے مشابہ۔تمام کمانڈز مختصر شکل dart pub get بطور dart pub g میں بھی دستیاب ہیں (تمام مخففات نہیں)۔ Flutter پروجیکٹس میں، کمانڈز کے آگے flutter لگایا جاتا ہے: flutter pub get، flutter pub add وغیرہ۔ Flutter ورژن ہدف پلیٹ فارم کے ساتھ پلگ ان کی مطابقت بھی اضافی طور پر چیک کرتا ہے۔
pub.dev — Dart اور Flutter ایکو سسٹم کی مرکزی پیکیج رجسٹری۔ جنوری 2025 تک، وہاں 50,000 سے زیادہ پیکیج شائع ہو چکے ہیں، جس کی کل ڈاؤن لوڈ 10 بلین سے تجاوز کر گئی ہے۔ ہر پیکیج کا ایک صفحہ ہوتا ہے جس میں وضاحت، دستاویزات، مقبولیت کے اسکور، Pub Points ریٹنگز اور ورژن ہوتے ہیں۔
Pub Points — 0 سے 130 پوائنٹس تک خودکار پیکیج کوالٹی تشخیص کا نظام۔ یہ مدنظر رکھتا ہے: لائسنس کی موجودگی، وضاحت، مثالیں، تازہ ترین مستحکم Dart ورژن کے ساتھ مطابقت، کمزوریوں کی عدم موجودگی، ٹیسٹ کوریج، فارمیٹنگ کی درستگی۔ زیادہ اسکور تلاش میں پیکیج کی نمائش اور صارفین کے اعتماد کو بڑھاتا ہے۔
اشاعت کے عمل میں کئی مراحل شامل ہیں:
pubspec.yaml چیک کریں: name، description، version، license کی موجودگی یقینی بنائیں (SPDX شناخت کنندہ تجویز کردہ، مثلاً MIT)۔dart pub publish --dry-run چلائیں — سرور کو بھیجے بغیر اشاعت کا تخمینہ، پیکیج میں شامل تمام فائلیں اور ممکنہ غلطیاں دکھاتا ہے۔dart pub publish OAuth تصدیق کے لیے براؤزر کھولے گا۔اہم قواعد: صرف منفرد نام والے پیکیج شائع کیے جا سکتے ہیں؛ ایک بار شائع شدہ ورژن کو حذف نہیں کیا جا سکتا (صرف 7 دنوں کے اندر dart pub unpublish سے چھپایا جا سکتا ہے)؛ بڑی اپ ڈیٹس کے لیے Semantic Versioning قواعد پر عمل کریں، بڑا ورژن تبدیل کیے بغیر عوامی API نہ توڑیں۔
اکثر پوچھے گئے سوالات
dart pub get اور dart pub upgrade میں کیا فرق ہے؟pub get موجودہ pubspec.lock سے ورژن لوڈ کرتا ہے، اسے تبدیل کیے بغیر (اگر لاک فائل نہیں ہے — بناتا ہے)۔ pub upgrade لاک فائل کو نظر انداز کرتا ہے اور تمام انحصار کو تازہ ترین مطابقت پذیر رینج میں دوبارہ حل کرتا ہے، پھر لاک فائل کو اوور رائڈ کرتا ہے۔
راستہ انحصار استعمال کریں: dependencies: my_package: path: ../my_package۔ راستہ پروجیکٹ کی جڑ سے متعلق ہے۔ ایسے انحصار pubspec.lock میں طے نہیں ہوتے — ہر بلڈ پر pub ڈائریکٹری کا موجودہ مواد لیتا ہے۔
تنازع کرنے والے پیکیجز کو متداخل رینجز والے ورژن میں اپ ڈیٹ کریں۔ اگر ناممکن ہو — pubspec.yaml میں عارضی طور پر dependency_overrides استعمال کریں یا ایک پیکیج کو متبادل سے بدل دیں۔ dart pub deps چلانے سے انحصار کے درخت کو دیکھنے میں مدد ملتی ہے۔
pubspec.lock تمام انحصاروں (براہ راست اور عبوری) کے عین ورژن طے کرتا ہے، تمام ڈویلپر مشینوں اور CI/CD پر دوبارہ قابل تولید بلڈ کو یقینی بناتا ہے۔ اس کے بغیر، ہر pub get نیوی پیچ ریلیز کی وجہ سے مختلف ورژن منتخب کر سکتا ہے۔
پیشگی جانچ کے لیے dart pub publish --dry-run چلائیں، پھر dart pub publish۔ پہلی اشاعت پر Google تصدیق ضروری ہے۔ پیکیج کا نام منفرد، وضاحت، لائسنس اور درست ورژن ہونا چاہیے۔
Pub Points — 0 سے 130 تک کا معیار تشخیص کا نظام۔ لائسنس (MIT، Apache-2.0)، تفصیلی وضاحت، استعمال کی مثالیں، ٹیسٹ شامل کرکے، تازہ ترین Dart ورژن کے ساتھ مطابقت برقرار رکھ کر اور تجزیہ کار کی نحوی تنبیہات درست کرکے اسکور بہتر بنائیں۔
خلاصہ
pub get سے pub publish تک پیکیج مینجمنٹ کے مکمل لائف سائیکل کا احاطہ کرتے ہیںہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔