pubspec.yaml एक Flutter प्रोजेक्ट की मुख्य कॉन्फ़िगरेशन फ़ाइल है, जो एप्लिकेशन के मेटाडेटा, डिपेंडेंसी और संसाधनों को परिभाषित करती है। यह YAML फ़ॉर्मेट में लिखी जाती है और Dart पैकेज मैनेजर द्वारा प्रोसेस की जाती है। Dart दस्तावेज़ीकरण, 2025 के अनुसार, इस फ़ाइल की हर पंक्ति बिल्ड, पब्लिशिंग और वर्ज़निंग को प्रभावित करती है। pubspec.yaml Flutter इकोसिस्टम में Podfile, build.gradle और Info.plist को बदलता है, उनके कार्यों को एक एकल मैनिफ़ेस्ट में संयोजित करता है।
मुख्य बिंदु
pubspec.yaml YAML फ़ॉर्मेट में एक मैनिफ़ेस्ट फ़ाइल है, जिसे pub पैकेज मैनेजर Dart और Flutter प्रोजेक्ट्स के प्रबंधन के लिए उपयोग करता है। यह प्रोजेक्ट रूट में स्थित होती है और हर flutter pub get कमांड पर प्रोसेस की जाती है। अन्य प्लेटफ़ॉर्म के विपरीत, जहाँ कॉन्फ़िगरेशन कई फ़ाइलों में बिखरा होता है, Flutter सभी ज़रूरतों के लिए एक केंद्रीकृत मैनिफ़ेस्ट का उपयोग करता है।
फ़ाइल में मेटाडेटा होता है: प्रोजेक्ट का नाम, विवरण, वर्ज़न, लेखक। इस डेटा का उपयोग pub.dev पर पैकेज प्रकाशित करते समय और App Store और Google Play के लिए एप्लिकेशन बिल्ड करते समय किया जाता है। description फ़ील्ड पैकेज खोज परिणामों में प्रदर्शित होता है, इसलिए यह जानकारीपूर्ण होना चाहिए और इसमें कीवर्ड होने चाहिए जिनसे अन्य डेवलपर्स लाइब्रेरी ढूँढ सकें।
सही pubspec.yaml के बिना Flutter प्रोजेक्ट बिल्ड नहीं किया जा सकता। सिंटैक्स त्रुटियाँ या गलत इंडेंटेशन लाइन X पर एरर संदेश के साथ तुरंत कंपाइलेशन विफलता का कारण बनता है। YAML व्हाइटस्पेस के प्रति संवेदनशील है: एक अतिरिक्त स्पेस डेटा संरचना बदल देता है, और टैब सिंटैक्स त्रुटि पैदा करते हैं। इसलिए, pubspec.yaml को मैन्युअल रूप से संपादित करते समय YAML सिंटैक्स हाइलाइटिंग वाले एडिटर का उपयोग करना महत्वपूर्ण है, जैसे VS Code में आधिकारिक Flutter एक्सटेंशन।
pubspec.yaml अनिवार्य और वैकल्पिक सेक्शन से बना होता है। प्रत्येक सेक्शन प्रोजेक्ट कॉन्फ़िगरेशन के एक विशिष्ट पहलू के लिए ज़िम्मेदार है। सेक्शन का क्रम मायने नहीं रखता, लेकिन समुदाय की परंपरा के अनुसार पदानुक्रम इस प्रकार है: मेटाडेटा, एनवायरनमेंट, डिपेंडेंसी, संसाधन, प्लेटफ़ॉर्म।
name फ़ील्ड snake_case फ़ॉर्मेट में एक अद्वितीय पैकेज पहचानकर्ता सेट करता है, जो केवल छोटे लैटिन अक्षरों, अंकों और अंडरस्कोर से बना होता है। description फ़ील्ड 180 वर्णों तक का प्रोजेक्ट सारांश है, जो pub.dev पर प्रकाशन के लिए अनिवार्य है। विवरण को पैकेज के उद्देश्य को समझाना चाहिए बिना नाम दोहराए, और रिपॉजिटरी खोज अनुकूलन के लिए कीवर्ड शामिल करने चाहिए।
name: my_flutter_app
description: Flutter के साथ कार्य प्रबंधन ऐप
publish_to: 'none'
version फ़ील्ड प्लस चिह्न (1.0.0+1) के बाद वैकल्पिक बिल्ड नंबर के साथ सिमैंटिक वर्ज़निंग major.minor.patch का उपयोग करता है। environment सेक्शन अनुकूलता सुनिश्चित करने के लिए Dart और Flutter SDK के न्यूनतम और अधिकतम वर्ज़न सेट करता है। यदि SDK का नया वर्ज़न प्रोजेक्ट कोड के साथ असंगत ब्रेकिंग परिवर्तन करता है, तो बिल्ड एक स्पष्ट त्रुटि संदेश के साथ रुक जाएगा।
version: 1.0.0+1
environment:
sdk: '>=3.2.0 <4.0.0'
flutter: '>=3.16.0'
dependencies सेक्शन उन पैकेजों को सूचीबद्ध करता है जो रनटाइम पर एप्लिकेशन को चलाने के लिए आवश्यक हैं। dev_dependencies सेक्शन में टेस्टिंग, कोड जनरेशन और डेवलपमेंट के लिए पैकेज होते हैं — वे रिलीज़ बिल्ड में शामिल नहीं होते। डिपेंडेंसी को अलग करना प्रदर्शन के लिए महत्वपूर्ण है: dependencies में प्रत्येक पैकेज अंतिम APK या IPA आकार बढ़ाता है, साथ ही अतिरिक्त लाइब्रेरी के इनिशियलाइज़ेशन के कारण एप्लिकेशन स्टार्टअप समय भी बढ़ाता है।
dependencies:
flutter:
sdk: flutter
http: ^1.2.0
provider: ^6.1.0
shared_preferences: ^2.2.0
cached_network_image: ^3.3.0
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ^5.4.0
build_runner: ^2.4.0
flutter सेक्शन में संसाधनों, फ़ॉन्ट और प्लेटफ़ॉर्म पैरामीटर कॉन्फ़िगर करने के लिए उप-सेक्शन होते हैं। संसाधन paths array के माध्यम से जुड़ते हैं जो विशिष्ट फ़ाइलों या पूरे निर्देशिकाओं को निर्दिष्ट करता है। सभी पथ प्रोजेक्ट रूट के सापेक्ष निर्दिष्ट किए जाते हैं, pubspec.yaml के सापेक्ष नहीं। यह एक महत्वपूर्ण बारीकियाँ है जो अक्सर शुरुआती Flutter डेवलपर्स को भ्रमित करती है।
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/icons/
- assets/config.json
- assets/data/translations/
fonts:
- family: RobotoMono
fonts:
- asset: fonts/RobotoMono-Regular.ttf
- asset: fonts/RobotoMono-Bold.ttf
weight: 700
- asset: fonts/RobotoMono-Italic.ttf
style: italic
pubspec.yaml के माध्यम से एसेट्स को जोड़ने से फ़ाइलें रनटाइम पर AssetBundle के माध्यम से सुलभ हो जाती हैं। यह इमेज, JSON, टेक्स्ट फ़ाइलों और किसी भी अन्य संसाधनों के लिए काम करता है। Flutter स्वचालित रूप से विभिन्न स्क्रीन रिज़ॉल्यूशन का समर्थन करता है: यदि आप images/2x/ और images/3x/ जोड़ते हैं, तो Flutter डिवाइस पिक्सेल अनुपात के आधार पर उपयुक्त इमेज संस्करण चुनेगा। ऐसा करने के लिए, assets में केवल रूट images/ फ़ोल्डर निर्दिष्ट करना पर्याप्त है।
कस्टम फ़ॉन्ट fonts सेक्शन के माध्यम से family नाम और शैलियों की सूची के साथ जोड़े जाते हैं। pubspec.yaml में बदलाव के बाद, परिवर्तनों को लागू करने के लिए flutter pub get चलाना आवश्यक है। फ़ॉन्ट का उपयोग MaterialApp थीम में वैश्विक रूप से और विशिष्ट विजेट्स में स्थानीय रूप से किया जा सकता है। प्रत्येक शैली के लिए, आप weight (100–900) और style (normal, italic) निर्दिष्ट कर सकते हैं, जो Flutter को कोड में FontWeight और FontStyle का उपयोग करते समय सही फ़ॉन्ट फ़ाइल चुनने की अनुमति देता है।
pub डिपेंडेंसी के स्रोत निर्दिष्ट करने के कई तरीकों का समर्थन करता है: pub.dev, Git रिपॉजिटरी, स्थानीय पथ और निजी रिपॉजिटरी। स्रोत का चुनाव डेवलपमेंट चरण पर निर्भर करता है: स्थिर संस्करणों के लिए pub.dev का उपयोग किया जाता है, फ़ोर्क और कस्टम संशोधनों के लिए Git, समानांतर में विकसित लाइब्रेरी के लिए स्थानीय पथ।
| स्रोत | सिंटैक्स | उदाहरण |
|---|---|---|
| Pub.dev | ^1.0.0 | http: ^1.2.0 |
| Git | git: url | git: https://github.com/user/pkg.git |
| स्थानीय पथ | path: ./lib | path: ../my_package |
| होस्टेड | hosted: name | hosted: my_private_repo |
^version ऑपरेटर एक संगत संस्करण को दर्शाता है: ^1.2.0 संस्करण >=1.2.0 और <2.0.0 की अनुमति देता है। यह CocoaPods में ~> ऑपरेटर और npm में Caret ऑपरेटर के समान है। pub स्वचालित रूप से SAT सॉल्वर एल्गोरिथम के माध्यम से डिपेंडेंसी हेल को हल करता है, जो सभी बाधाओं को संतुष्ट करने वाले संस्करणों का संयोजन ढूँढता है। यदि ऐसा कोई संयोजन मौजूद नहीं है, तो pub विरोध करने वाले पैकेजों को इंगित करते हुए एक विस्तृत संदेश आउटपुट करता है।
pubspec.lock फ़ाइल डिपेंडेंसी के सटीक संस्करणों को लॉक करती है। इसे टीम की सभी मशीनों पर पुनरुत्पादक बिल्ड सुनिश्चित करने के लिए एप्लिकेशन के लिए वर्ज़न कंट्रोल में संग्रहीत किया जाना चाहिए। लाइब्रेरी के लिए, pubspec.lock रिपॉजिटरी में शामिल नहीं किया जाता क्योंकि लाइब्रेरी उपयोगकर्ताओं को विभिन्न डिपेंडेंसी संस्करणों के साथ इसका उपयोग करने में सक्षम होना चाहिए। flutter pub upgrade कमांड pubspec.yaml बाधाओं के अनुसार सभी डिपेंडेंसी को अपडेट करता है, जबकि flutter pub outdated दिखाता है कि कौन से पैकेज अपडेट किए जा सकते हैं।
pub.dev पर एप्लिकेशन प्रकाशित करने के लिए, सेटिंग्स publish_to सेक्शन में निर्दिष्ट की जाती हैं। 'none' मान आकस्मिक पैकेज प्रकाशन को रोकता है, जो आंतरिक या गैर-सार्वजनिक परियोजनाओं के लिए महत्वपूर्ण है। यदि publish_to गायब है, तो pub डिफ़ॉल्ट pub.dev पर पैकेज प्रकाशित करने का प्रयास करता है, जिससे अवांछित कोड रिसाव हो सकता है।
flutter सेक्शन में प्लेटफ़ॉर्म पैरामीटर शामिल हैं: generate प्लेटफ़ॉर्म फ़ाइलों के स्वचालित जनरेशन के लिए, और deferred-components मॉड्यूलर फ़ंक्शनलिटी लोडिंग के लिए। generate: true पैरामीटर Flutter को flutter create --platforms के माध्यम से नए प्लेटफ़ॉर्म जोड़ने पर स्वचालित रूप से प्लेटफ़ॉर्म प्रोजेक्ट (iOS, Android, Web) बनाने और अपडेट करने के लिए मजबूर करता है। इस पैरामीटर के बिना, प्लेटफ़ॉर्म फ़ोल्डर संरचना pubspec.yaml से असंगत हो सकती है।
flutter:
generate: true
deferred-components:
- name: photoEditor
libraries:
- package:photo_editor/library.dart
platforms सेक्शन पैकेज के लिए लक्ष्य प्लेटफ़ॉर्म सेट करता है। एप्लिकेशन के लिए, यह flutter create के माध्यम से विशिष्ट प्लेटफ़ॉर्म समर्थन जोड़ने पर स्वचालित रूप से निर्धारित होता है। प्लेटफ़ॉर्म को pubspec.yaml संपादित करके मैन्युअल रूप से जोड़ा और हटाया जा सकता है। डिफ़र्ड कंपोनेंट्स एप्लिकेशन के कुछ हिस्सों को आवश्यकतानुसार लोड करने की अनुमति देते हैं, इंस्टॉल आकार कम करते हैं — यह विशेष रूप से गेम और बड़ी मात्रा में शायद ही कभी उपयोग की जाने वाली सामग्री वाले एप्लिकेशन के लिए प्रासंगिक है।
पैकेज प्रकाशित करते समय, pub सभी pubspec.yaml फ़ील्ड को रिपॉजिटरी आवश्यकताओं के अनुपालन के लिए जाँचता है। अनिवार्य फ़ील्ड name, version और description की अनुपस्थिति प्रकाशन अस्वीकृति का कारण बनती है। इसके अतिरिक्त, लाइसेंस की शुद्धता, README.md और CHANGELOG.md की उपस्थिति की जाँच की जाती है। कोड विश्लेषक त्रुटियों (dart analyze) वाले पैकेज भी मान्यता में विफल होते हैं। सफल प्रकाशन के बाद, पैकेज कुछ मिनटों के भीतर pub.dev पर उपलब्ध हो जाता है।
dependency_overrides सेक्शन ट्रांज़िटिव डिपेंडेंसी की बाधाओं को अनदेखा करते हुए, एक विशिष्ट पैकेज संस्करण को बलपूर्वक निर्दिष्ट करने की अनुमति देता है। यह एक शक्तिशाली लेकिन खतरनाक तंत्र है: यदि गलत तरीके से उपयोग किया जाता है, तो यह लाइब्रेरी असंगतताओं का कारण बन सकता है। dependency_overrides का उपयोग केवल अस्थायी रूप से संघर्षों को हल करने या नए संस्करणों का परीक्षण करने के लिए करें। मुख्य डिपेंडेंसी को ठीक करने के बाद, ओवरराइड को हटा देना चाहिए ताकि लंबी अवधि में प्रोजेक्ट के डिपेंडेंसी ग्राफ को तोड़ने से बचा जा सके।
pubspec.yaml में executables सेक्शन निष्पादन योग्य स्क्रिप्ट निर्दिष्ट करने की अनुमति देता है जो pub पैकेज को सक्रिय करते समय PATH में इंस्टॉल करता है। यह Dart में लिखे CLI टूल के लिए उपयोगी है, जैसे build_runner या dart_code_metrics। dart pub global activate कमांड पैकेज को वैश्विक रूप से इंस्टॉल करता है, executables में निर्दिष्ट स्क्रिप्ट को टर्मिनल से सुलभ बनाता है। एप्लिकेशन के लिए, executables का आमतौर पर उपयोग नहीं किया जाता, क्योंकि एंट्री पॉइंट lib/main.dart में main के माध्यम से परिभाषित किया जाता है।
अक्सर पूछे जाने वाले प्रश्न
YAML फ़ॉर्मेट इंडेंटेशन के लिए टैब वर्णों को प्रतिबंधित करता है। प्रत्येक नेस्टिंग स्तर के लिए ठीक दो स्पेस का उपयोग करें। इंडेंटेशन त्रुटि flutter pub get चलाने पर अप्रत्याशित वर्ण संदेश के साथ सिंटैक्स त्रुटि का कारण बनती है। VS Code Flutter प्लगइन के साथ स्वचालित रूप से सही इंडेंटेशन सम्मिलित करता है।
dependencies अंतिम एप्लिकेशन बिल्ड में शामिल होते हैं और उपयोगकर्ता उपकरणों पर रनटाइम में उपलब्ध होते हैं। dev_dependencies का उपयोग केवल डेवलपमेंट और टेस्टिंग के दौरान किया जाता है — वे रिलीज़ APK या IPA में शामिल नहीं होते। उदाहरण: flutter_test केवल dev_dependencies में होना चाहिए ताकि प्रोडक्शन बिल्ड आकार न बढ़े।
flutter pub upgrade कमांड pubspec.yaml में निर्दिष्ट बाधाओं के अनुकूल नवीनतम संस्करणों में सभी डिपेंडेंसी को अपडेट करता है। एकल पैकेज अपडेट करने के लिए, flutter pub upgrade <पैकेज_नाम> का उपयोग करें। flutter pub outdated कमांड पुराने संस्करणों और उपलब्ध अपडेट वाले पैकेजों की सूची दिखाता है।
^ चिह्न केयरट वर्ज़निंग को दर्शाता है। ^1.2.0 का अर्थ है 1.2.0 से 2.0.0 तक कोई भी संस्करण, 2.0.0 को छोड़कर। यह pubspec.yaml में डिपेंडेंसी निर्दिष्ट करने के लिए मानक ऑपरेटर है, जो प्रमुख API परिवर्तनों के जोखिम के बिना बग फिक्स और माइनर अपडेट की गारंटी देता है।
हाँ, एप्लिकेशन के लिए समान बिल्ड सुनिश्चित करने के लिए pubspec.lock रिपॉजिटरी में अनिवार्य है। लाइब्रेरी के लिए, इसे शामिल न करने की सिफारिश की जाती है ताकि लाइब्रेरी उपयोगकर्ता डिपेंडेंसी के नवीनतम संगत संस्करण प्राप्त कर सकें। यह परंपरा Ruby में Gemfile.lock और Node.js में package-lock.json के नियमों के समान है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें