pub: मुख्य अवधारणाएँ, Dart पैकेज मैनेजर और pubspec.yaml

लेखक: IT Sectr प्रकाशित: 2026-02-13 पढ़ने का समय: 14 मिनट

pub — Dart भाषा और Flutter SDK के लिए आधिकारिक पैकेज मैनेजर। यह तृतीय-पक्ष लाइब्रेरीज़ को डाउनलोड करने, इंस्टॉल करने, अपडेट करने और हटाने, डिपेंडेंसी वर्ज़न प्रबंधित करने और अपने स्वयं के पैकेज प्रकाशित करने को स्वचालित करता है। केंद्रीय रिपॉजिटरी pub.dev है, जहाँ 50,000 से अधिक पैकेज उपलब्ध हैं। प्रोजेक्ट कॉन्फ़िगरेशन pubspec.yaml फ़ाइल में वर्णित है।

मुख्य बिंदु

  • pub — Dart/Flutter में निर्मित पैकेज मैनेजर, JavaScript के npm या Python के pip के समान
  • pubspec.yaml — मेटाडेटा, डिपेंडेंसी और SDK बाधाओं वाली एकमात्र कॉन्फ़िगरेशन फ़ाइल
  • pub.dev — खुले पैकेज, लोकप्रियता विश्लेषण, संगतता स्कोर वाली आधिकारिक रजिस्ट्री
  • Semantic Versioning — pub caret और tilde रेंज के साथ सख्त वर्जनिंग का उपयोग करता है
  • Lock फ़ाइलpubspec.lock पुनरुत्पादक बिल्ड के लिए सटीक वर्ज़न फिक्स करती है

pub क्या है?

pub (Package Universal Browser) — एक निर्मित पैकेज मैनेजर जो Dart SDK के साथ आता है। यह बाहरी लाइब्रेरीज़ प्रबंधित करता है, वर्ज़न विरोधों को हल करता है, ट्रांज़िटिव डिपेंडेंसी डाउनलोड करता है और पैकेज को स्थानीय रूप से कैश करता है। Flutter इकोसिस्टम में, pub का उपयोग नेविगेशन प्लगिन, HTTP क्लाइंट, स्टेट मैनेजर और अन्य घटकों को जोड़ने के लिए मुख्य उपकरण के रूप में किया जाता है।

pub के मुख्य कार्यों में शामिल हैं: pub.dev रजिस्ट्री से डिपेंडेंसी इंस्टॉल करना, स्थानीय पथ (पथ डिपेंडेंसी) और git रिपॉजिटरी; सिमैंटिक वर्जनिंग नियमों के अनुसार वर्ज़न समाधान; सिस्टम निर्देशिका में डाउनलोड किए गए पैकेज का कैशिंग; सार्वजनिक रजिस्ट्री में अपने स्वयं के पैकेज का प्रकाशन। ये सभी ऑपरेशन CLI कमांड dart pub या इसके समकक्ष flutter pub के माध्यम से उपलब्ध हैं।

pub की आर्किटेक्चर बंद डिपेंडेंसी ग्राफ़ पर आधारित है: मैनेजर एक ट्री बनाता है जहाँ प्रत्येक पैकेज ठीक एक बार दिखाई देता है। यदि दो लाइब्रेरीज़ एक ही पैकेज के विभिन्न वर्ज़न माँगती हैं, तो pub एक संगत रेंज खोजने का प्रयास करता है या विरोध त्रुटि की रिपोर्ट करता है। यह npm के दृष्टिकोण से भिन्न है, जो विभिन्न ट्री नोड्स में एक ही पैकेज के कई वर्ज़न की अनुमति देता है।

pubspec.yaml संरचना

pubspec.yaml फ़ाइल — किसी भी Dart या Flutter प्रोजेक्ट की केंद्रीय कॉन्फ़िगरेशन फ़ाइल। यह YAML प्रारूप में लिखी जाती है और इसमें मेटाडेटा, डिपेंडेंसी, बिल्ड कॉन्फ़िगरेशन और SDK बाधाएँ होती हैं। Flutter एप्लिकेशन के लिए एक विशिष्ट उदाहरण नीचे दिया गया है:

yaml
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.devdependency_overrides फ़ील्ड विरोध स्थितियों में पैकेज वर्ज़न को जबरन ओवरराइड करने की अनुमति देता है — सावधानी से उपयोग करें, केवल अस्थायी समाधान के रूप में।

डिपेंडेंसी और उनके प्रकार

pub चार प्रकार की डिपेंडेंसी का समर्थन करता है, प्रत्येक pubspec.yaml के अंदर अपने स्वयं के सिंटैक्स के साथ निर्दिष्ट होता है:

होस्टेड (hosted)

मानक प्रकार — पैकेज pub.dev रजिस्ट्री या किसी अन्य संगत रजिस्ट्री से डाउनलोड किया जाता है। पैकेज नाम और वर्ज़न निर्दिष्ट करें। उदाहरण: http: ^1.1.0 caret वर्जनिंग नियमों के अनुसार रेंज >=1.1.0 और <2.0.0 से नवीनतम संगत वर्ज़न डाउनलोड करेगा।

SDK डिपेंडेंसी

Flutter SDK या Dart SDK को शामिल करने के लिए उपयोग किया जाता है। सिंटैक्स: flutter: sdk: flutter। पैकेज रजिस्ट्री से नहीं, बल्कि स्थानीय Flutter SDK इंस्टॉलेशन से लिया जाता है। SDK डिपेंडेंसी वर्ज़न नहीं की जाती — उनका वर्ज़न वर्तमान में इंस्टॉल किए गए Flutter वर्ज़न द्वारा निर्धारित होता है।

पथ (path)

पैकेज वाली स्थानीय निर्देशिका को इंगित करता है। प्रकाशन के बिना लाइब्रेरी विकसित करने और परीक्षण करते समय उपयोगी। सिंटैक्स:

yaml
dependencies:
  my_local_lib:
    path: ../my_local_lib

पथ डिपेंडेंसी pubspec.lock में फिक्स नहीं होती — प्रत्येक अपडेट निर्दिष्ट पथ से पुनः हल होता है।

Git

पैकेज को सीधे git रिपॉजिटरी से शामिल करने की अनुमति देता है। ब्रांच, टैग और कमिट समर्थित हैं:

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

Git डिपेंडेंसी फोर्क, अप्रकाशित फिक्स या Pull Requests पर काम करने के लिए सुविधाजनक हैं। बिल्ड के दौरान अप्रत्याशित परिवर्तनों से बचने के लिए ब्रांच के बजाय एक विशिष्ट टैग या कमिट निर्दिष्ट करने की अनुशंसा की जाती है।

वर्जनिंग और रेंज

pub Semantic Versioning 2.0 का सख्ती से पालन करता है: प्रारूप MAJOR.MINOR.PATCH, जहाँ MAJOR — असंगत परिवर्तन, MINOR — पिछड़ा-संगत जोड़, PATCH — पिछड़ा-संगत सुधार। इस योजना के आधार पर, pub पैकेज संगतता निर्धारित करता है और विरोधों को हल करता है।

pubspec.yaml में वर्ज़न निर्दिष्ट करने के लिए तीन मुख्य ऑपरेटर का उपयोग किया जाता है:

  • Caret (^)^1.2.3 >=1.2.3 और <2.0.0 के बराबर है। सबसे सामान्य ऑपरेटर, क्योंकि यह मेजर वर्ज़न के भीतर संगतता दर्शाता है। मेजर वर्ज़न 0 (शून्य) वाले पैकेज के लिए — ^0.1.2 का अर्थ >=0.1.2 और <0.2.0 है, जो अस्थिर वर्ज़न के लिए SemVer नियमों का पालन करता है।
  • Tilde (~)~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 के मुख्य कमांड

सभी pub ऑपरेशन एकीकृत CLI इंटरफ़ेस के माध्यम से किए जाते हैं। Dart SDK कमांड dart pub का उपयोग करता है, Flutter SDK समकक्ष flutter pub का (अतिरिक्त रूप से Flutter SDK डिपेंडेंसी और प्लगिन को ध्यान में रखता है)। मुख्य कमांड नीचे दिए गए हैं:

  • dart pub getpubspec.yaml में निर्दिष्ट सभी डिपेंडेंसी डाउनलोड करता है, वर्ज़न हल करता है और pubspec.lock बनाता/अपडेट करता है। प्रोजेक्ट को पहली बार क्लोन करने या डिपेंडेंसी बदलने पर चलाएँ।
  • dart pub upgradepubspec.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 पर प्रकाशन

pub.dev — Dart और Flutter इकोसिस्टम का केंद्रीय पैकेज रजिस्ट्री। जनवरी 2025 तक, वहाँ 50,000 से अधिक पैकेज प्रकाशित हो चुके हैं, कुल डाउनलोड 10 बिलियन से अधिक है। प्रत्येक पैकेज में विवरण, दस्तावेज़ीकरण, लोकप्रियता स्कोर, Pub Points रेटिंग और वर्ज़न वाला एक पृष्ठ होता है।

Pub Points — 0 से 130 अंकों तक की एक स्वचालित पैकेज गुणवत्ता मूल्यांकन प्रणाली। यह ध्यान में रखता है: लाइसेंस की उपस्थिति, विवरण, उदाहरण, नवीनतम स्थिर Dart वर्ज़न के साथ संगतता, कमज़ोरियों की अनुपस्थिति, परीक्षण कवरेज, फ़ॉर्मेटिंग शुद्धता। उच्च स्कोर खोज में पैकेज की दृश्यता और उपयोगकर्ता विश्वास को बढ़ाता है।

प्रकाशन प्रक्रिया में कई चरण शामिल हैं:

  1. pubspec.yaml जाँचें: name, description, version, license की उपस्थिति सुनिश्चित करें (SPDX पहचानकर्ता अनुशंसित, जैसे MIT)।
  2. dart pub publish --dry-run चलाएँ — सर्वर पर भेजे बिना प्रकाशन का अनुकरण, पैकेज में शामिल सभी फ़ाइलों और संभावित त्रुटियों को प्रदर्शित करता है।
  3. पहले प्रकाशन पर Google खाते से प्रमाणीकरण करें: dart pub publish OAuth प्रमाणीकरण के लिए ब्राउज़र खोलेगा।
  4. टर्मिनल में प्रकाशन की पुष्टि करें। सफल अपलोड के बाद, पैकेज कुछ मिनटों में pub.dev पर दिखाई देता है।

महत्वपूर्ण नियम: केवल अद्वितीय नाम वाले पैकेज प्रकाशित किए जा सकते हैं; एक बार प्रकाशित वर्ज़न को हटाया नहीं जा सकता (केवल छिपाया जा सकता है — dart pub unpublish — 7 दिनों के भीतर); बड़े अपडेट के लिए, Semantic Versioning नियमों का पालन करें, मेजर वर्ज़न बदले बिना सार्वजनिक API को न तोड़ें।

अक्सर पूछे जाने वाले प्रश्न

dart pub get और dart pub upgrade में क्या अंतर है?

pub get मौजूदा pubspec.lock से वर्ज़न लोड करता है, इसे बदले बिना (यदि लॉक फ़ाइल नहीं है — बनाता है)। pub upgrade लॉक फ़ाइल को अनदेखा करता है और सभी डिपेंडेंसी को नवीनतम संगत रेंज में पुनः हल करता है, फिर लॉक फ़ाइल को ओवरराइट करता है।

pubspec.yaml में स्थानीय डिपेंडेंसी कैसे निर्दिष्ट करें?

पथ डिपेंडेंसी का उपयोग करें: dependencies: my_package: path: ../my_package। पथ प्रोजेक्ट रूट के सापेक्ष है। ऐसी डिपेंडेंसी pubspec.lock में फिक्स नहीं होती — प्रत्येक बिल्ड पर pub निर्देशिका की वर्तमान सामग्री लेता है।

डिपेंडेंसी विरोध त्रुटि पर क्या करें?

विरोध करने वाले पैकेजों को अतिव्यापी रेंज वाले वर्ज़न में अपडेट करें। यदि असंभव हो — pubspec.yaml में dependency_overrides का अस्थायी रूप से उपयोग करें या किसी एक पैकेज को विकल्प से बदलें। dart pub deps चलाने से डिपेंडेंसी ट्री की कल्पना करने में मदद मिलती है।

रिपॉजिटरी में pubspec.lock की आवश्यकता क्यों है?

pubspec.lock सभी डिपेंडेंसी (प्रत्यक्ष और ट्रांज़िटिव) के सटीक वर्ज़न को फिक्स करता है, सभी डेवलपर मशीनों और CI/CD पर पुनरुत्पादक बिल्ड सुनिश्चित करता है। इसके बिना, प्रत्येक pub get नए पैच रिलीज़ के कारण थोड़े भिन्न वर्ज़न चुन सकता है।

pub.dev पर पैकेज कैसे प्रकाशित करें?

पूर्व-जाँच के लिए dart pub publish --dry-run चलाएँ, फिर dart pub publish। पहले प्रकाशन पर Google प्रमाणीकरण आवश्यक है। पैकेज का नाम अद्वितीय होना चाहिए, विवरण, लाइसेंस और सही वर्ज़न होना चाहिए।

Pub Points क्या हैं और उन्हें कैसे सुधारें?

Pub Points — 0 से 130 तक की गुणवत्ता मूल्यांकन प्रणाली। लाइसेंस (MIT, Apache-2.0), विस्तृत विवरण, उपयोग उदाहरण, परीक्षण जोड़कर, नवीनतम Dart वर्ज़न के साथ संगतता बनाए रखकर और विश्लेषक सिंटैक्स चेतावनियाँ ठीक करके स्कोर में सुधार करें।

सारांश

  • pub — लाइब्रेरीज़ स्थापित करने, अपडेट करने और प्रकाशित करने के लिए निर्मित Dart/Flutter पैकेज मैनेजर
  • pubspec.yaml — डिपेंडेंसी, मेटाडेटा और SDK बाधाओं वाली केंद्रीय कॉन्फ़िगरेशन फ़ाइल
  • pub.dev — 50,000 से अधिक पैकेज, Pub Points प्रणाली और लोकप्रियता विश्लेषण वाली आधिकारिक रजिस्ट्री
  • चार प्रकार की डिपेंडेंसी — hosted, SDK, path और git सभी एकीकरण परिदृश्यों को कवर करते हैं
  • SemVer और लॉक फ़ाइल — सख्त सिमैंटिक वर्जनिंग + pubspec.lock पुनरुत्पादक बिल्ड की गारंटी देते हैं
  • आठ मुख्य कमांडpub get से pub publish तक पूर्ण पैकेज प्रबंधन जीवनचक्र को कवर करते हैं
  • dependency_overrides — एक जबरन विरोध समाधान तंत्र जिसमें सावधानीपूर्वक उपयोग आवश्यक है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें