Ali Hoseinpoor
Ali Hoseinpoor
خواندن ۹ دقیقه·۳ سال پیش

فایل pubspec.yaml رو قووورت بده ??

سلام به همه دوستان عزیزم امیدوارم که حالتون تو این روزای کرونایی خووووب باشه. ❤️❤️

قبل از اینکه بخوام برم بالا منبر واستون ?? تمام این مباحثی که توی این مقاله به شما میگم جامع تر و کامل ترش همراه با کلی مثال رو میتونید توی کانال یوتوبم ببینید. تماشای ویدیو pubspec.yaml در یوتوب من

بزارین اول از همه چیز بهتون بگم که اصن این فایل pubspec.yaml واسه چی تو همه برنامه های ما هستش؟؟???

این فایل تمام اطلاعات و وابستگی های پکیج ما به پکیج های دیگه رو توی خودش نگه میداره و با زبان yaml هم نوشته میشه. واسه همین تو تمام برنامه هایی که میسازید ردپای این فایل رو میبینید. ??

اما این اطلاعات که گفتم چیان ؟

Name :

اسم پکیج ما رو مشخص میکنه و ضروری هم هست ینی هر برنامه ای که میسازید باید مقدار name رو بهش بدید. حالا اگه پکیج ما یک library package باشه (ینی بقیه پکیج ها بتونن به پکیجی که ما نوشتیم وابسته بشن) پکیج های دیگه با این name ای که ما تعریف کردیم میتونن از پکیج ما استفاده بکنن. و توی سایت هایی که میزبان پکیج هستند مثه pub.dev پکیج ما با این name ای که گفتیم نمایش داده میشه. هم چنین زمانی که توی کدمون میخوایم فایل های برنامه خودمون رو import کنیم باید اولش اسم پکیجمون رو بنویسیم یعنی اگه من یک پکیج داشته باشم با اسم ali و بخوام توی کدم فایل مثلا main رو import کنم باید به این شکل عمل کنم :

import 'package:ali/main.dart';

قوانینی که برای انتخاب name وجود داره عبارتند از :

  • تمام حروفش حروف لاتین باشه
  • فاصله بین کلمات نباشه و برای گذاشتن فاصله از _ استفاده کنید.
  • با عدد شروع نشه
  • کلمه رزرو شده نباشه
نحوه مقدار دهی name در pubspec.yaml
نحوه مقدار دهی name در pubspec.yaml
نمایش نام پکیج در pub.dev
نمایش نام پکیج در pub.dev


Environment :

این پارامتر به ما اجازه میده تا هم به Dart SDK و هم به نسخه Flutter محدودیت هایی اضافه کنیم، به این معنی که وقتی مینویسیم :

اعمال محدودیت روی dart sdk
اعمال محدودیت روی dart sdk

ما مشخص میکنیم که این برنامه یا پکیج فقط بر روی نسخه های Dart SDK بالاتر یا مساوی از 2.7.0 اما پایین تر از 3.0.0 اجرا شود.

علاوه بر این، میتونیم با استفاده از پارامتر flutter مشخص کنیم که از چه نسخه فلاتر استفاده می‌کنیم :

 اعمال محدودیت روی dart sdk و نسخه فلاتر
اعمال محدودیت روی dart sdk و نسخه فلاتر

در این مورد، ما فقط در صورتی به برنامه خود اجازه اجرا میدیم که از نسخه Flutter 1.22.0 استفاده کنیم.

Version :

اگه شما قصد دارید که پکیج خودتون رو منتشر کنید که بقیه هم ازش استفاده کنند (مثلا توی pub.dev بزاریدش) حتما باید شماره ورژن رو مشخص کنید و هر بار که آپدیتی روی پکیجتون میدید این ورژن رو تغییر بدید این جوری کسانی که میخوان از پکیج شما استفاده کنن میتونن ورژن های پکیج شما رو ببینند و یا حتی از ورژن های مختلف پکیج شما استفاده کنند.

اما اگه پکیجتون یک پکیج local (یا همون application package که جایی منتشر نشده) باشه میتونید ورژن رو مقدار دهی نکنید و دارت به صورت پیش فرض مقدار 0.0.0 رو به عنوان ورژن پکیج شما میزاره.

حالا اگه کلا نمیدونین چجوری باید ورژن بندی کنید من توی مقاله های بعدی نحوه ورژن گذاری رو به شما کامل یاد میدم.(یا میتونید ویدیوی یوتوبم رو ببینید که کامل نحوه ورژن گذاری رو توضیح دادم : ویدیو یوتوب )

نحوه ورژن گذاری در pubspec.yaml
نحوه ورژن گذاری در pubspec.yaml
نمایش ورژن های مختلف یک پکیج در pub.dev
نمایش ورژن های مختلف یک پکیج در pub.dev


Description :

این پارامتر هم اگه میخوایم که پکیجمون رو به صورت عمومی منتشر کنیم (library package) ضروری است.

با استفاده از این پارامتر ما میتونیم یک توضیحات خلاصه از پکیجمون و کاری که میکنه رو فراهم کنیم که زمانی که دیگران دنبال پکیج ما میگردند (مثلا در pub.dev) توضیحات مربوط به پکیج ما رو ببینند و با پکیج ما آشنا بشن. اما اگه قصد ندارید که پکیج خودتون رو منتشر کنید (application package) این پارامتر اختیاریست و میتونید اون رو نادیده بگیرید.

قوانینی که برای نوشتن description وجود داره عبارتند از :

  • حتما به زبان انگلیسی باشد
  • خلاصه باشد. بین 60 تا 180 کاراکتر
نحوه نوشتن description در pubspec.yaml
نحوه نوشتن description در pubspec.yaml
نمایش توضیحات یک پکیج در pub.dev
نمایش توضیحات یک پکیج در pub.dev


Homepage :

اگه بخوایم آدرس وب سایت پکیجمون رو مشخص کنیم میتونیم این پارامتر رو مقدار دهی بکنیم.

اما این پارامتر کاملا اختیاریه چه واسه library package ها چه واسه application package ها.

اما اگه پکیج شما یک library package هست که قصد دارید اون رو منتشرش کنید بهتره که این پارامتر رو مقداردهی کنید تا کسانی که میخوان از پکیج شما استفاده کنن بفهمن پکیج شما از کجا اوومده.

تنها قانونی هم که واسه مقداردهی این پارامتر وجود داره اینه که :

  • حتما باید یک url باشه
نحوه مقداردهی homepage در pubspec.yaml
نحوه مقداردهی homepage در pubspec.yaml
نمایش homepage در pub.dev
نمایش homepage در pub.dev


Repository :

این پارامتر هم شبیه به homepage است ینی هم کاملا اختیاریست و هم اینکه حتما باید یک url باشد با این تفاوت که آدرس url ای که اینجا قرار میدید آدرس source code پکیج شماست.

اگر پکیج شما روی github قرار داره میتونید آدرس github پکیجتون رو برای این پارامتر قرار بدید.به این صورت : https://github.com/<user>/<repository>

با اینکه مثل homepage کاملا اختیاریه ولی اگه قصد دارید پکیج تون رو عمومی منتشر کنید بهتره که این پارامتر رو مقدار دهی کنید تا اطلاعات بیشتری در دسترس کسانی که میخوان از پکیج شما استفاده کنند قرار بدید.

نحوه مقداردهی repository در pubspec.yaml
نحوه مقداردهی repository در pubspec.yaml

Issue tracker :

این پارامتر هم مثل دوتا پارامتر قبلیه یعنی هم کاملا اختیاریه هم اینکه حتما باید یک url باشه ولی فرقش اینه که آدرسی که قرار میدیم باید آدرس جایی باشه که کسانی که از پکیج شما استفاده میکنن بتونن باگ هایی که روی پکیج وجود داشت رو ببینن و هم اینکه اگه باگی وجود داشته باشه اون رو ثبتش کنن که شما بتونید اون باگ رو بررسی و رفعش کنید.

با اینکه کاملا اختیاریه ولی بهتره که برای پکیج های عمومی این پارامتر رو مقدار دهی کنید.

نکته : اگه پکیج شما توی pub.dev باشه و پارامتر repository (پارامتر قبلی) رو با آدرس github پکیجتون مقدار دهی کرده باشید، در این حالت اگه پارمتر issue tracker رو مقدار دهی نکنید خود pub.dev به صورت اتوماتیک issue tracker گیت هاب پکیجتون رو به عنوان مقدار این پارامتر قرار میده. (https://github.com/<user>/<repository>/issues)

نحوه مقداردهی issue_tracker در pubspec.yaml
نحوه مقداردهی issue_tracker در pubspec.yaml

Documentation :

برخی از پکیج ها یک صفحه وبی دارند که توی اون صفحه مستندات کامل اون پکیج گذاشته شده. اگه پکیج شما هم به صورت عمومی منتشر شده و این صفحه مستندات رو هم به صورت جداگانه داره میتونید آدرس اون صفحه رو به عنوان مقدار این پارامتر قرار بدید.

این پارامتر هم برای library package ها و هم برای application package ها کاملا اختیاریست. و حتما باید یک url باشد.

Dependencies :

اگر میخوایم توی برنامه خودمون از یک سری پکیج دیگه استفاده کنیم باید اسم اون پکیج ها رو در این بخش وارد کنیم.

ما دو نوع dependency داریم. dependencies و dev_dependencies. اما فرقشون چیه ؟

اگه به یک پکیج هم در فاز توسعه و هم در فاز اجرا نیاز داشته باشیم اسم اون پکیج رو در بخش dependencies قرار میدهیم و این پکیج ها در خروجی نهاییه برنامه وجود خواهند داشت ولی اگه به یک پکیج تنها در فاز توسعه و طراحی نیاز داشته باشیم اون پکیج رو در بخش dev_dependencies قرار میدیم.

مثلا اگه از پکیج های linter استفاده میکنید که یک سری قوانین روی کد نوشتن شما اعمال میکنه یا از پکیج هایی استفاده میکنید که یک سری کد رو واسه ما تولید میکنه و یا از پکیج های تست نویسی استفاده میکنید، چون این کارها فقط در فاز توسعه و طراحی به درد ما میخوره پس این پکیج ها رو در بخش dev_dependencies قرار میدیم.

نکته : dev_dependencies ها در خروجی نهاییه برنامه ما وارد نمیشن

ما به 4 روش میتونیم یک پکیج رو به برناممون اضافه کنیم :

  • استفاده از پکیج هایی که روی سایت pub.dev هستند
  • استفاده از پکیج هایی که روی سیستم local خودمون هستند. (path pacakge)
  • استفاده از پکیج هایی که روی git هستند
  • استفاده از پکیج هایی که روی سرورهای میزبان پکیج هستند. (pub.dev هم یکی از این سرورهاست)
نحوه مقداردهی dependencies و dev_dependencies در pubspec.yaml
نحوه مقداردهی dependencies و dev_dependencies در pubspec.yaml


Dependency Overrides :

این سناریو را تصور کنید: ما از پکیج bloc با نسخه 6.0.0 به صورت مستقیم توی برناممون استفاده می کنیم، اما در عین حال از یه پکیج دیگه ای هم توی برناممون استفاده میکنیم که اون پکیجه خودش از نسخه 5.0.0 bloc استفاده می کنه.

الان برنامه ما به صورت مستقیم داره از نسخه 6 بلاک استفاده میکنه و به صورت غیر مستقیم به نسخه 5 بلاک هم وابسته است. الان با این شرایط اگه دستور flutter pub get رو بزنیم به ما ارور میده که ورژن های بلاک با هم همخونی ندارن.

حالا اگه ما نتونیم ورژن bloc ای که توی پکیج دیگه داره استفاده میشه و ورژن 5 رو داره زیادش کنیم و به ورژن 6 تبدیلش کنیم، یا باید ورژن bloc ای که داریم ازش به صورت مستقیم استفاده میکنیم رو از 6 بیاریم روی 5 (که خب این باعث میشه از ویژگی های جدید پکیج بلاک محروم بشیم) یا اینکه از dependency_overrides استفاده کنیم. و بهش بگیم که برنامه من حتما باید از نسخه 6 بلاک استفاده کنه صرف نظر از اینکه هر پکیجی داره از چه نسخه بلاکی استفاده میکنه. و پکیج بلاک رو به شکل زیر در لیست dependency_overrides قرار میدهیم:

dependency_overrides: flutter_bloc: 6.0.6

الان با این کار برنامه من کلا با بلاک نسخه 6.0.6 کار میکنه و دیگه کاری نداره که پکیج های دیگه ای که از بلاک استفاده میکنن و توی برنامه ما هم هستن از چه نسخه بلاکی استفاده میکنن. الان اگه flutter pub get کنیم مشکل ناهمخونی ورژن ها برطرف میشه.( اما استفاده از dependency_overrides کمی خطرناک است و در بعضی مواقع باعث ارور های بیشتری میشه : میتونی این ارورها رو در ویدیو یوتوبم ببینی )

Publish_to :

به صورت پیش فرض پکیج ما روی pub.dev منتشر میشه اگه میخوایم که روی هیچ جایی منتشر نشه میتونیم مقدار none رو بهش بدیم :

publish_to: none

و اگه میخوایم از سرور های میزبان پکیج دیگه استفاده کنیم میتونیم این پارامتر رو مقدار دهی کنیم.

این پارامتر هم کاملا اختیاری است.

Flutter section :

در پایین فایل ما قسمتی به نام flutter رو می بینیم. زمان ایجاد یک پروژه جدید، می بینیم که از قبل یک پارامتر دارد به اسم uses-material-design که برابر با true است و اگه ما میخوایم از icon font های متریال استفاده کنیم حتما باید مقدارش رو برابر با true بزاریم.

و در آخر هم میتونیم asset ها و font های خودمون رو در بخش flutter مشخص کنیم :


خب دیگه رسیدیم به آخر این مقاله ?? و من توی این مقاله تمام فیلدهای مهمی که توی فایل pubspec.yaml وجود داشت رو به شما توضیح دادم و امیدوارم که واستون مفید بوده باشه.

در انتها اگه میخواین این مبحث رو کامل تر و عمیق تر متوجه بشید میتونید ویدیوی کانال یوتوب من که مربوط به فایل pubspec.yaml میشه رو نگاه کنید. توی اون ویدیو مفاهیم همراه با مثال و جزئی تر بررسی شده اند.

لینک ویدیو آموزش فایل pubspec.yaml به صورت کامل : https://youtu.be/zx4NvRdaxac

لینک کانال یوتوب من : https://www.youtube.com/c/FlutterStan

لینک کانال تلگرام من برای با خبر شدن از آخرین مقالات و ویدیو ها : https://t.me/flutter_stan

ممنون میشم ازتون که با دنبال کردن کانال یوتوب من از من حمایت کنید ❤️❤️❤️❤️

flutterdartandroidios
دوستان لطفا کانال یوتوب برنامه نویسی بنده رو حمایت کنید : https://www.youtube.com/c/FlutterStan
شاید از این پست‌ها خوشتان بیاید