pub: кључни појмови, менаџер пакета Dart и pubspec.yaml

Аутор: IT Sectr Објављено: 2026-02-13 Време читања: 14 мин

pub — званични менаџер пакета за језик Dart и Flutter SDK. Аутоматизује преузимање, инсталацију, ажурирање и уклањање библиотека трећих страна, управљање верзијама зависности и објављивање сопствених пакета. Централно репозиторијум — pub.dev, где је смештено више од 50 000 пакета. Конфигурација пројекта се описује у датотеци pubspec.yaml.

Главно

  • pub — уграђени менаџер пакета Dart/Flutter, аналог npm за JavaScript или pip за Python
  • pubspec.yaml — једина конфигурациона датотека пројекта са метаподацима, зависностима и ограничењима SDK
  • pub.dev — званични регистар са отвореним пакетима, аналитиком популарности, бодовима компатибилности
  • Semantic Versioning — pub користи строго верзионисање са caret и тилда опсезима
  • Lock датотекаpubspec.lock фиксира тачне верзије за поновљиву изградњу

Шта је pub?

pub (Package Universal Browser) — уграђени менаџер пакета који се испоручује уз Dart SDK. Управља спољним библиотекама, решава конфликте верзија, преузима транзитивне зависности и кешира пакете локално. У екосистему Flutter pub се користи као главни алат за повезивање додатака за навигацију, HTTP клијената, менаџера стања и других компоненти.

Основне функције pub укључују: инсталацију зависности из регистра pub.dev, локалних путања (path зависности) и 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 — семантичка верзија са опционим 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:

Регистарске (hosted)

Стандардни тип — пакет се преузима из регистра pub.dev или другог компатибилног регистра. Наводи се име пакета и верзија. Пример: http: ^1.1.0 ће преузети последњу компатибилну верзију из опсега >=1.1.0 и <2.0.0 по правилима caret верзионисања.

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 Request. Препоручује се навођење конкретне ознаке или комита уместо гране, како би се избегле неочекиване промене при изградњи.

Верзионисање и опсези

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 за нестабилне верзије.
  • Тилда (~)~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

Све операције 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

pub.dev — централни регистар пакета екосистема Dart и Flutter. До јануара 2025. године тамо је објављено више од 50 000 пакета, укупно преузетих преко 10 милијарди пута. Сваки пакет има страницу са описом, документацијом, оценама популарности (Popularity), бодовима 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 датотеке, не мењајући је (ако lock датотека не постоји — креира је). pub upgrade игнорише lock датотеку и поново решава све зависности према најновијем компатибилном опсегу, затим преписује lock датотеку.

Како навести локалну зависност у pubspec.yaml?

Користите path зависност: dependencies: my_package: path: ../my_package. Путања се наводи у односу на корен пројекта. Таква зависност се не фиксира у pubspec.lock — при свакој изградњи pub узима актуелни садржај директоријума.

Шта радити при грешци dependency conflict?

Ажурирајте конфликтне пакете на верзије са преклапајућим опсезима. Ако то није могуће — привремено користите dependency_overrides у pubspec.yaml или замените један од пакета алтернативом. Корисно је покренути dart pub deps за визуелизацију стабла зависности.

Зашто је pubspec.lock потребан у репозиторијуму?

pubspec.lock фиксира тачне верзије свих зависности (директних и транзитивних), обезбеђујући поновљиву изградњу на свим машинама програмера и у CI/CD. Без њега, свако покретање pub get може изабрати мало другачије верзије због изласка нових patch издања.

Како објавити пакет на 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 и lock датотека — строго семантичко верзионисање + pubspec.lock гарантују поновљивост изградњи
  • Осам основних команди — од pub get до pub publish покривају пун животни циклус управљања пакетима
  • dependency_overrides — механизам принудног решавања конфликата, који захтева опрезну примену

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође