pubspec.yaml — فایل پیکربندی اصلی پروژه Flutter است که فراداده، وابستگیها و منابع برنامه را تعریف میکند. این فایل در قالب YAML نوشته شده و توسط مدیر بسته Dart پردازش میشود. به گفته Dart documentation, 2025، هر خط از این فایل بر ساخت، انتشار و نسخهبندی تأثیر میگذارد. pubspec.yaml جایگزین Podfile، build.gradle و Info.plist در اکوسیستم Flutter میشود و عملکرد آنها را در یک مانیفست واحد ترکیب میکند.
نکات کلیدی
pubspec.yaml — یک فایل مانیفست در قالب YAML است که مدیر بسته pub از آن برای مدیریت پروژههای Dart و Flutter استفاده میکند. این فایل در ریشه پروژه قرار دارد و با هر دستور flutter pub get پردازش میشود. برخلاف سایر پلتفرمها که پیکربندی در چندین فایل پراکنده است، Flutter از یک مانیفست متمرکز برای همه نیازها استفاده میکند.
فایل شامل فراداده است: نام پروژه، توضیحات، نسخه، نویسنده. این دادهها هنگام انتشار بسته در pub.dev و هنگام ساخت برنامه برای App Store و Google Play استفاده میشوند. فیلد description در نتایج جستجوی بستهها نمایش داده میشود، بنابراین باید informative باشد و شامل کلمات کلیدی باشد که دیگر توسعهدهندگان بتوانند کتابخانه را پیدا کنند.
بدون pubspec.yaml صحیح، پروژه Flutter نمیتواند ساخته شود. خطاهای نحوی یا تورفتگیهای نادرست منجر به شکست فوری کامپایل با پیام Error on line X میشود. YAML به فاصلهها حساس است: یک فاصله اضافی ساختار داده را تغییر میدهد و tab باعث خطای نحوی میشود. بنابراین هنگام ویرایش دستی pubspec.yaml استفاده از ویرایشگری با برجستهسازی نحو YAML، مانند VS Code با افزونه رسمی Flutter، مهم است.
pubspec.yaml از بخشهای اجباری و اختیاری تشکیل شده است. هر بخش مسئول جنبه خاصی از پیکربندی پروژه است. ترتیب بخشها مهم نیست، اما طبق قرارداد جامعه سلسلهمراتب رعایت میشود: فراداده، محیط، وابستگیها، منابع، پلتفرمها.
فیلد name شناسه منحصربهفرد بسته را در قالب snake_case، متشکل از حروف کوچک لاتین، اعداد و زیرخط تعیین میکند. فیلد description — توضیح کوتاه پروژه تا ۱۸۰ کاراکتر، اجباری برای انتشار در pub.dev. توضیح باید هدف بسته را توضیح دهد، بدون تکرار نام، و شامل کلمات کلیدی برای بهینهسازی جستجوی مخزن باشد.
name: my_flutter_app
description: برنامه مدیریت وظایف با Flutter
publish_to: 'none'
فیلد version از نسخهبندی معنایی major.minor.patch با شماره ساخت اختیاری بعد از علامت مثبت (1.0.0+1) استفاده میکند. بخش 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
اتصال assets از طریق pubspec.yaml فایلها را از طریق AssetBundle در زمان اجرا در دسترس قرار میدهد. این برای تصاویر، JSON، فایلهای متنی و هر منبع دیگری کار میکند. Flutter به طور خودکار از وضوحهای مختلف صفحه پشتیبانی میکند: اگر images/2x/ و images/3x/ قرار دهید، Flutter نسخه مناسب تصویر را بر اساس device pixel ratio دستگاه انتخاب میکند. برای این کار کافی است در 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، برای forkها و تغییرات سفارشی — 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 | hosted: name | hosted: my_private_repo |
عملگر ^version به معنای نسخه سازگار است: ^1.2.0 اجازه نسخههای >=1.2.0 و <2.0.0 را میدهد. این مشابه عملگر ~> در CocoaPods و عملگر Caret در npm است. pub به طور خودکار Dependency Hell را از طریق الگوریتم SAT-solver حل میکند که ترکیبی از نسخهها را پیدا میکند که همه محدودیتها را برآورده کند. اگر چنین ترکیبی وجود نداشته باشد، 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 به طور خودکار پروژههای پلتفرم (iOS، Android، Web) را هنگام افزودن پلتفرمهای جدید از طریق flutter create --platforms ایجاد و بهروزرسانی کند. بدون این پارامتر، ساختار پوشههای پلتفرم ممکن است با pubspec.yaml همگامسازی خود را از دست بدهد.
flutter:
generate: true
deferred-components:
- name: photoEditor
libraries:
- package:photo_editor/library.dart
بخش platforms پلتفرمهای هدف را برای بسته تعیین میکند. برای برنامهها به طور خودکار هنگام افزودن پشتیبانی از پلتفرم خاص از طریق flutter create تعیین میشود. پلتفرمها را میتوان به صورت دستی از طریق ویرایش pubspec.yaml اضافه و حذف کرد. Deferred Components امکان بارگذاری بخشهایی از برنامه در صورت نیاز را فراهم میکند و اندازه نصب را کاهش میدهد — این به ویژه برای بازیها و برنامههای با محتوای کماستفاده زیاد مهم است.
هنگام انتشار بسته، pub تمام فیلدهای pubspec.yaml را از نظر مطابقت با الزامات مخزن بررسی میکند. عدم وجود فیلدهای اجباری name، version و description منجر به رد انتشار میشود. علاوه بر این، صحت مجوز، وجود README.md و CHANGELOG.md بررسی میشود. بستههای دارای خطاهای تحلیلگر کد (dart analyze) نیز از اعتبارسنجی عبور نمیکنند. پس از انتشار موفق، بسته ظرف چند دقیقه در pub.dev در دسترس قرار میگیرد.
بخش dependency_overrides امکان اعمال اجباری نسخه بسته را با نادیده گرفتن محدودیتهای وابستگیهای انتقالی فراهم میکند. این مکانیزم قدرتمند اما خطرناکی است: در صورت استفاده نادرست میتواند منجر به ناسازگاری کتابخانهها شود. از dependency_overrides فقط به طور موقت برای حل تعارضات یا آزمایش نسخههای جدید استفاده کنید. پس از رفع وابستگیهای اصلی، override باید حذف شود تا گراف وابستگی پروژه در بلندمدت مختل نشود.
بخش executables در pubspec.yaml امکان مشخص کردن اسکریپتهای اجرایی را فراهم میکند که pub هنگام فعالسازی بسته در PATH نصب میکند. این برای ابزارهای CLI نوشته شده با Dart، مانند build_runner یا dart_code_metrics مفید است. دستور dart pub global activate بسته را به صورت سراسری نصب میکند و اسکریپتهای مشخص شده در executables را از ترمینال در دسترس قرار میدهد. برای برنامهها معمولاً از executables استفاده نمیشود، زیرا نقطه ورود از طریق main در lib/main.dart تعیین میشود.
سوالات متداول
فرمت YAML استفاده از کاراکترهای tab را برای تورفتگی ممنوع میکند. برای هر سطح تو در تو دقیقاً از دو فاصله استفاده کنید. خطای تورفتگی منجر به خطای نحوی هنگام اجرای 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 لیست بستههای دارای نسخههای قدیمی و بهروزرسانیهای موجود را نشان میدهد.
علامت ^ نشاندهنده نسخهبندی سازگار (caret) است. ^1.2.0 به معنای هر نسخه از 1.2.0 تا 2.0.0 (به استثنای 2.0.0) است. این عملگر استاندارد برای مشخص کردن وابستگیها در pubspec.yaml است که دریافت اصلاحات و بهروزرسانیهای جزئی را بدون خطر تغییرات عمده API تضمین میکند.
بله، برای برنامهها pubspec.lock در مخزن برای تضمین ساختهای یکسان الزامی است. برای کتابخانهها توصیه میشود آن را اضافه نکنید تا کاربران کتابخانه آخرین نسخههای سازگار وابستگیها را دریافت کنند. این قراردادی مشابه قوانین Gemfile.lock در Ruby و package-lock.json در Node.js است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید