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 অ্যারের মাধ্যমে সংযুক্ত হয় যা নির্দিষ্ট ফাইল বা সম্পূর্ণ ডিরেক্টরি নির্দিষ্ট করে। সমস্ত পাথ প্রকল্পের রুটের সাপেক্ষে নির্দিষ্ট করা হয়, 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/ ফোল্ডার নির্দিষ্ট করা যথেষ্ট।
কাস্টম ফন্ট family নাম এবং স্টাইল তালিকাসহ fonts সেকশনের মাধ্যমে যোগ করা হয়। 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন