pub — званични менаџер пакета за језик Dart и Flutter SDK. Аутоматизује преузимање, инсталацију, ажурирање и уклањање библиотека трећих страна, управљање верзијама зависности и објављивање сопствених пакета. Централно репозиторијум — pub.dev, где је смештено више од 50 000 пакета. Конфигурација пројекта се описује у датотеци pubspec.yaml.
Главно
npm за JavaScript или pip за Pythonpubspec.lock фиксира тачне верзије за поновљиву изградњуpub (Package Universal Browser) — уграђени менаџер пакета који се испоручује уз Dart SDK. Управља спољним библиотекама, решава конфликте верзија, преузима транзитивне зависности и кешира пакете локално. У екосистему Flutter pub се користи као главни алат за повезивање додатака за навигацију, HTTP клијената, менаџера стања и других компоненти.
Основне функције pub укључују: инсталацију зависности из регистра pub.dev, локалних путања (path зависности) и git репозиторијума; решавање верзија по правилима семантичког верзионисања; кеширање преузетих пакета у системском директоријуму; објављивање сопствених пакета у јавни регистар. Све ове операције су доступне преко CLI команде dart pub или еквивалентне flutter pub.
Архитектура pub се заснива на затвореном графу зависности: менаџер гради стабло у коме се сваки пакет појављује тачно једном. Ако две библиотеке захтевају различите верзије истог пакета, pub покушава да пронађе компатибилан опсег или пријављује грешку конфликта. Ово се разликује од приступа npm, где су дозвољене вишеструке верзије истог пакета у различитим чворовима стабла.
Датотека pubspec.yaml — централна конфигурациона датотека сваког Dart или Flutter пројекта. Написана је у YAML формату и садржи метаподатке, зависности, конфигурацију изградње и ограничења SDK. Испод је типичан пример за Flutter апликацију:
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 — семантичка верзија са опционим build бројем после плуса; environment — минималне верзије Dart SDK и Flutter SDK; dependencies — главне зависности апликације; dev_dependencies — зависности само за развој и тестирање; flutter — секција конфигурације Flutter (assets, fonts, plugins).
Поље publish_to контролише доступност објављивања: вредност none забрањује објављивање (типично за апликације), подразумевана вредност — https://pub.dev. Поље dependency_overrides омогућава принудно преопредељивање верзије пакета у конфликтној ситуацији — користити опрезно, само за привремено решење.
pub подржава четири врсте зависности, свака се наводи својом синтаксом унутар pubspec.yaml:
Стандардни тип — пакет се преузима из регистра pub.dev или другог компатибилног регистра. Наводи се име пакета и верзија. Пример: http: ^1.1.0 ће преузети последњу компатибилну верзију из опсега >=1.1.0 и <2.0.0 по правилима caret верзионисања.
Користе се за повезивање Flutter SDK или Dart SDK. Синтакса: flutter: sdk: flutter. Пакет се узима из локалне инсталације Flutter SDK, а не из регистра. SDK зависности се не верзионишу — њихова верзија се одређује тренутно инсталираном верзијом Flutter.
Указују на локални директоријум са пакетом. Корисне при развоју библиотеке и тестирању без објављивања. Синтакса:
dependencies:
my_local_lib:
path: ../my_local_libПутањске зависности се не фиксирају у pubspec.lock — свако ажурирање се поново решава из наведене путање.
Омогућавају повезивање пакета директно из git репозиторијума. Подржавају се гране, ознаке и комитови:
dependencies:
my_git_lib:
git:
url: https://github.com/user/my_git_lib.git
ref: mainGit зависности су згодне за форкове, необјављене исправке или рад на Pull Request. Препоручује се навођење конкретне ознаке или комита уместо гране, како би се избегле неочекиване промене при изградњи.
pub се строго придржава Semantic Versioning 2.0: формат MAJOR.MINOR.PATCH, где MAJOR — некомпатибилне измене, MINOR — уназад компатибилна додавања, PATCH — уназад компатибилне исправке. На основу ове шеме pub одређује компатибилност пакета и решава конфликте.
За задавање верзија користе се три основна оператора у pubspec.yaml:
^1.2.3 еквивалентно >=1.2.3 и <2.0.0. Најраспрострањенији оператор, јер подразумева компатибилност у оквиру главне верзије. За пакете са главном верзијом 0 (нула) — ^0.1.2 значи >=0.1.2 и <0.2.0, што одговара правилима SemVer за нестабилне верзије.~1.2.3 еквивалентно >=1.2.3 и <1.3.0. Фиксира споредну верзију, дозвољавајући само patch ажурирања. Ређе се користи, углавном када је позната некомпатибилност на нивоу споредне верзије.>=1.2.0 <2.0.0 — експлицитан запис који даје потпуну контролу. Користан за сложена ограничења, на пример при коришћењу више верзија транзитивних зависности.Након извршења dart pub get, pub генерише датотеку pubspec.lock, која фиксира тачне верзије свих решених пакета (директних и транзитивних). Ову датотеку је потребно укључити у систем контроле верзија ради обезбеђивања поновљивих изградњи на свим машинама. При извршењу dart pub upgrade, lock датотека се ажурира на најновије компатибилне верзије у оквиру задатих ограничења.
Грешка dependency conflict настаје када два пакета захтевају опсеге који се не преклапају за исту зависност. pub пријављује који пакети су ушли у конфликт и из ког разлога. Решење: ажурирати један од конфликтних пакета на компатибилну верзију, користити dependency_overrides (привремена мера) или заменити пакет алтернативом.
Све операције pub се извршавају преко јединственог CLI интерфејса. У Dart SDK користи се команда dart pub, у Flutter SDK — еквивалентна flutter pub (додатно узима у обзир Flutter SDK зависности и додатке). Испод су кључне команде:
dart pub get — преузима све зависности наведене у pubspec.yaml, решава верзије и креира/ажурира pubspec.lock. Извршава се при првом клонирању пројекта или након промене зависности.dart pub upgrade — ажурира све зависности на најновије верзије у оквиру ограничења pubspec.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 — поново учитава све кеширане пакете. Помаже при оштећењу локалног кеша или грешкама контролних сума.dart pub deps — приказује стабло зависности у читљивом текстуалном формату. Корисно за анализу транзитивних зависности и проналажење дупликација.dart pub publish — објављује тренутни пакет на pub.dev. Пре објављивања проверава исправност pubspec.yaml, лиценцу и опис.dart pub outdated — приказује листу застарелих зависности са тренутном, жељеном и последњом доступном верзијом. Аналог npm outdated.Све команде су доступне и у скраћеном облику dart pub get као dart pub g (нису све скраћенице). У Flutter пројектима, испред pub команди додаје се префикс flutter: flutter pub get, flutter pub add и тако даље. Flutter верзија додатно проверава компатибилност додатака са циљном платформом.
pub.dev — централни регистар пакета екосистема Dart и Flutter. До јануара 2025. године тамо је објављено више од 50 000 пакета, укупно преузетих преко 10 милијарди пута. Сваки пакет има страницу са описом, документацијом, оценама популарности (Popularity), бодовима Pub Points и верзијама.
Pub Points — аутоматски систем оцењивања квалитета пакета од 0 до 130 бодова. Узимају се у обзир: постојање лиценце, опис, примери, компатибилност са последњом стабилном верзијом Dart, одсуство рањивости, покривеност тестовима, исправност форматирања. Висок резултат повећава видљивост пакета у претрази и поверење корисника.
Процес објављивања укључује неколико корака:
pubspec.yaml: постојање name, description, version, license (препоручује се навођење SPDX идентификатора, нпр. MIT).dart pub publish --dry-run — симулација објављивања без слања на сервер, приказује све датотеке које ће бити укључене у пакет и могуће грешке.dart pub publish ће отворити прегледач за OAuth аутентификацију.Важна правила: могу се објављивати само пакети са јединственим именом; једном објављена верзија се не може обрисати (може се само сакрити — dart pub unpublish — у року од 7 дана); за велика ажурирања треба следити правила Semantic Versioning, не ломити јавни API без промене главне верзије.
Често постављана питања
dart pub get и dart pub upgrade?pub get преузима верзије из постојеће pubspec.lock датотеке, не мењајући је (ако lock датотека не постоји — креира је). pub upgrade игнорише lock датотеку и поново решава све зависности према најновијем компатибилном опсегу, затим преписује lock датотеку.
Користите path зависност: dependencies: my_package: path: ../my_package. Путања се наводи у односу на корен пројекта. Таква зависност се не фиксира у pubspec.lock — при свакој изградњи pub узима актуелни садржај директоријума.
Ажурирајте конфликтне пакете на верзије са преклапајућим опсезима. Ако то није могуће — привремено користите dependency_overrides у pubspec.yaml или замените један од пакета алтернативом. Корисно је покренути dart pub deps за визуелизацију стабла зависности.
pubspec.lock фиксира тачне верзије свих зависности (директних и транзитивних), обезбеђујући поновљиву изградњу на свим машинама програмера и у CI/CD. Без њега, свако покретање pub get може изабрати мало другачије верзије због изласка нових patch издања.
Покрените dart pub publish --dry-run за прелиминарну проверу, затим dart pub publish. При првом објављивању потребна је ауторизација преко Google-а. Пакет мора имати јединствено име, опис, лиценцу и исправну верзију.
Pub Points — систем оцењивања квалитета од 0 до 130. Резултат се може побољшати додавањем лиценце (MIT, Apache-2.0), детаљног описа, примера коришћења, тестова, одржавањем компатибилности са последњом верзијом Dart и исправљањем синтактичких примедби анализатора.
Резиме
pub get до pub publish покривају пун животни циклус управљања пакетимаРазвићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође