pub, pubspec və analyzer
pubspec.yaml paketin pasportudur — həm asılılıqları, həm də paketin özünü təsvir edir.
Əsas sahələr:
name— paketin adı,lower_snake_case;import 'package:<name>/...'məhz bundan yaranır.version— semantik versiya (major.minor.patch); yalnız dərc olunan paketlərdə vacibdir.environment: sdk:— hansı Dart SDK versiyaları ilə işlədiyi. Bu, ən çox unudulan sahədir:sdk: ^3.6.0yazmasan, records və ya pattern matching istifadə edən kodun köhnə SDK-da anlaşılmaz xəta ilə sınır.dependencies— paketin işləmək üçün ehtiyac duyduğu kitabxanalar. Sənin paketini istifadə edən hər kəs bunları da yükləyir.dev_dependencies— yalnız inkişaf və test üçün:test,lints,build_runner,mocktail. İstifadəçilərə ötürülmür — ona görətestpaketini səhvəndependencies-ə yazmaq klassik səhvdir.dependency_overrides— versiya konfliktini müvəqqəti aşmaq üçün. Uzun müddət qalırsa, bu artıq texniki borcdur; dərc olunan paketdə isə heç vaxt olmamalıdır.
name: billing_core
description: Domain logic for invoices and payments.
version: 1.4.2
environment:
sdk: ^3.6.0 # which SDKs this package supports
dependencies:
http: ^1.2.0 # needed at runtime by every consumer
collection: ^1.19.0
meta: ^1.16.0
dev_dependencies:
test: ^1.25.0 # only for developing THIS package
lints: ^5.0.0
coverage: ^1.11.0
# Temporary escape hatch only - never in a published package.
# dependency_overrides:
# http: 1.2.1Tipik pubspec.yaml — dependencies və dev_dependencies ayrılığı
| Constraint | Nəyə icazə verir | Qeyd |
|---|---|---|
| `^1.4.2` | `>=1.4.2 <2.0.0` | Default seçim: yeni funksiyalar və düzəlişlər gəlir, breaking change gəlmir |
| `^0.3.1` | `>=0.3.1 <0.4.0` | 1.0.0-dan əvvəl **minor** rəqəm breaking sayılır — interview-da sevilən incəlik |
| `>=1.2.0 <1.5.0` | Əl ilə verilmiş diapazon | Konkret səbəb olanda (məlum regressiya); səbəbi şərhdə yaz |
| `1.4.2` | Yalnız həmin versiya | Kitabxanada qadağan sayılır: istifadəçilərdə versiya konflikti yaradır |
| `any` | İstənilən versiya | Praktikada təhlükəlidir — gələcək major buraxılış paketini sındıra bilər |
| `path: ../billing_core` | Lokal qovluqdan | Monorepo və lokal inkişaf üçün; dərc oluna bilməz |
| `git: {url: ..., ref: v1.4.2}` | Repozitoriyadan, konkret ref ilə | Daxili paketlər üçün normaldır; `ref` mütləq tag/commit olsun, branch yox |
`pubspec.lock` həll edilmiş dəqiq versiyaları saxlayır.
- Tətbiq (app, CLI, Flutter tətbiqi) —
lockfaylını commit et: komanda və CI eyni versiyalarla işləsin, "mənim maşınımda işləyir" halı aradan qalxsın. - Kitabxana (dərc olunan paket) — commit etmə: istifadəçilər öz həllini qurur, sənin lock faylının onlara heç bir təsiri yoxdur, sadəcə səs-küy yaradır.
Gündəlik əmrlər:
dart pub get— lock faylına uyğun yükləyir (CI-da məhz bu işlədilir).dart pub upgrade— constraint-lərin icazə verdiyi ən yeni versiyalara qalxır və lock-u yeniləyir.dart pub upgrade --major-versions— constraint-lərin özünü də qaldırır (breaking ola bilər).dart pub outdated— heç nəyi dəyişmədən hesabat verir: hansı paket köhnəlib, yeniləmə üçün constraint dəyişməlidirmi.dart pub deps— asılılıq ağacı; konflikt araşdırarkən əvəzsizdir.
Statik analiz Dart ekosisteminin ən güclü tərəfidir:
dart analyze— tip xətaları + lint qaydaları; CI-da--fatal-infosilə işlədilir ki, xəbərdarlıqlar da bloklasın.dart format— mübahisəsiz vahid formatlama; CI-dadart format --output=none --set-exit-if-changed .analysis_options.yaml—include: package:lints/recommended.yaml(paketlər üçün) və yapackage:flutter_lints/flutter.yaml; üstündənlinter: rules:bölməsində komandanın qaydaları əlavə olunur.dart fix --dry-run/dart fix --apply— lint xəbərdarlıqlarının böyük hissəsini avtomatik düzəldir; SDK yeniləyəndən sonra ilk işlədiləcək əmr məhz budur.
Interview tövsiyəsi: "Dart paketi üçün CI-da nə işlədirsən?" sualına əmrləri sıra ilə və səbəbi ilə say — bu, hazır cavab təsiri bağışlayır: dart pub get → dart format --output=none --set-exit-if-changed . (formatlama müzakirəsini kod review-dan çıxarır) → dart analyze --fatal-infos (xəbərdarlıqların yığılmasının qarşısını alır) → dart test --coverage=coverage → dərc olunan paketdirsə dart pub publish --dry-run və dart pub outdated. Sonda bir cümlə əlavə et: "dart fix --apply CI-da yox, lokal olaraq işlədilir — CI kodu dəyişməməlidir, sadəcə uyğunsuzluğu bildirməlidir."
📚 Mənbələr və sənədlər
- pubspec faylırəsmidart.dev
- Statik analizrəsmidart.dev