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 — সমস্ত ক্যাশ করা প্যাকেজ পুনরায় লোড করে। স্থানীয় ক্যache দূষিত হলে বা চেকসাম ত্রুটিতে সহায়তা করে।
  • 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন