pub — den officiella pakethanteraren för språket Dart och Flutter SDK. Den automatiserar nedladdning, installation, uppdatering och borttagning av tredjepartsbibliotek, hantering av beroendeversioner och publicering av egna paket. Centralt arkiv — pub.dev, där över 50 000 paket finns. Projektets konfiguration beskrivs i filen pubspec.yaml.
Huvudpunkter
npm för JavaScript eller pip för Pythonpubspec.lock fastställer exakta versioner för reproducerbara byggenpub (Package Universal Browser) — den inbyggda pakethanteraren som medföljer Dart SDK. Den hanterar externa bibliotek, löser versionskonflikter, laddar ner transitiva beroenden och cache-lagrar paket lokalt. I Flutter-ekosystemet används pub som huvudverktyg för att ansluta navigeringsplugin, HTTP-klienter, state managers och andra komponenter.
Huvudfunktionerna för pub inkluderar: installation av beroenden från pub.dev-registret, lokala sökvägar (path-beroenden) och git-arkiv; lösning av versioner enligt reglerna för semantisk versionshantering; cache-lagring av nedladdade paket i systemkatalogen; publicering av egna paket i det öppna registret. Alla dessa operationer är tillgängliga via CLI-kommandot dart pub eller motsvarande flutter pub.
Arkitekturen för pub baseras på en sluten beroendegraf: hanteraren bygger ett träd där varje paket förekommer exakt en gång. Om två bibliotek kräver olika versioner av samma paket försöker pub hitta ett kompatibelt intervall eller rapporterar ett konfliktfel. Detta skiljer sig från npm-metoden, där flera versioner av samma paket tillåts i olika noder i trädet.
Filen pubspec.yaml — den centrala konfigurationsfilen för varje Dart- eller Flutter-projekt. Den är skriven i YAML-format och innehåller metadata, beroenden, byggkonfiguration och SDK-begränsningar. Nedan finns ett typiskt exempel för en Flutter-applikation:
name: my_app
description: Exempel på Flutter-app
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/Nyckelfält i pubspec.yaml: name — unikt namn på paketet (endast latinska bokstäver, understreck, siffror); description — kort beskrivning (obligatorisk för publicering); version — semantisk version med valfritt byggnummer efter plustecken; environment — minimiversioner av Dart SDK och Flutter SDK; dependencies — applikationens huvudberoenden; dev_dependencies — beroenden endast för utveckling och testning; flutter — konfigurationssektion för Flutter (assets, fonts, plugins).
Fältet publish_to styr tillgängligheten för publicering: värdet none förbjuder publicering (typiskt för applikationer), standardvärdet är https://pub.dev. Fältet dependency_overrides gör det möjligt att tvinga fram en version av ett paket i en konfliktsituation — använd med försiktighet, endast som tillfällig lösning.
pub stöder fyra typer av beroenden, var och en med sin egen syntax i pubspec.yaml:
Standardtyp — paketet laddas ner från registret pub.dev eller ett annat kompatibelt register. Paketnamn och version anges. Exempel: http: ^1.1.0 laddar ner den senaste kompatibla versionen från intervallet >=1.1.0 och <2.0.0 enligt reglerna för caret-versionshantering.
Används för att ansluta Flutter SDK eller Dart SDK. Syntax: flutter: sdk: flutter. Paketet hämtas från den lokala installationen av Flutter SDK, inte från registret. SDK-beroenden versionshanteras inte — deras version bestäms av den för närvarande installerade Flutter-versionen.
Pekar på en lokal katalog med paketet. Användbart vid utveckling av bibliotek och testning utan publicering. Syntax:
dependencies:
my_local_lib:
path: ../my_local_libSökvägsberoenden registreras inte i pubspec.lock — varje uppdatering löses på nytt från den angivna sökvägen.
Gör det möjligt att ansluta ett paket direkt från ett git-arkiv. Grenar, taggar och commits stöds:
dependencies:
my_git_lib:
git:
url: https://github.com/user/my_git_lib.git
ref: mainGit-beroenden är praktiska för forks, opublicerade korrigeringar eller arbete med Pull Request. Det rekommenderas att ange en specifik tagg eller commit istället för en gren för att undvika oväntade ändringar vid bygget.
pub följer strikt Semantic Versioning 2.0: formatet MAJOR.MINOR.PATCH, där MAJOR — inkompatibla ändringar, MINOR — bakåtkompatibla tillägg, PATCH — bakåtkompatibla korrigeringar. Baserat på detta schema bestämmer pub paketens kompatibilitet och löser konflikter.
För att ange versioner används tre huvudoperatorer i pubspec.yaml:
^1.2.3 motsvarar >=1.2.3 och <2.0.0. Den vanligaste operatorn eftersom den förutsätter kompatibilitet inom huvudversionen. För paket med huvudversion 0 (noll) — ^0.1.2 betyder >=0.1.2 och <0.2.0, vilket överensstämmer med SemVer-reglerna för instabila versioner.~1.2.3 motsvarar >=1.2.3 och <1.3.0. Fixerar mindre版本, tillåter endast patch-uppdateringar. Används mer sällan, främst när inkompatibilitet på mindre versionsnivå är känd.>=1.2.0 <2.0.0 — explicit notation som ger full kontroll. Användbart för komplexa begränsningar, till exempel när flera versioner av transitiva beroenden används.Efter att ha kört dart pub get genererar pub filen pubspec.lock, som fastställer de exakta versionerna av alla lösta paket (direkta och transitiva). Denna fil måste inkluderas i versionshanteringssystemet för att säkerställa reproducerbara byggen på alla maskiner. Vid körning av dart pub upgrade uppdateras lock-filen till de senaste kompatibla versionerna inom de angivna begränsningarna.
Felet dependency conflict uppstår när två paket kräver icke-överlappande intervall av samma beroende. pub rapporterar vilka paket som hamnat i konflikt och av vilken anledning. Lösning: uppdatera ett av de konflikerande paketen till en kompatibel version, använd dependency_overrides (tillfällig åtgärd) eller ersätt paketet med ett alternativ.
Alla pub-operationer utförs via ett enhetligt CLI-gränssnitt. I Dart SDK används kommandot dart pub, i Flutter SDK — motsvarande flutter pub (tar också hänsyn till Flutter SDK-beroenden och plugin). Nedan finns de viktigaste kommandona:
dart pub get — laddar ner alla beroenden som anges i pubspec.yaml, löser versioner och skapar/uppdaterar pubspec.lock. Utförs vid första kloningen av projektet eller efter ändring av beroenden.dart pub upgrade — uppdaterar alla beroenden till de senaste versionerna inom pubspec.yaml-begränsningarna och skriver över pubspec.lock. Kan uppdatera ett enskilt paket: dart pub upgrade http.dart pub add <package> — lägger till ett nytt beroende i pubspec.yaml och kör omedelbart pub get. Exempel: dart pub add dio lägger till den senaste versionen av paketet dio.dart pub remove <package> — tar bort beroendet från pubspec.yaml och startar om lösningen av grafen.dart pub cache repair — laddar om alla cachade paket. Hjälper vid skada på lokal cache eller fel i kontrollsummor.dart pub deps — visar beroendeträdet i ett läsbart textformat. Användbart för analys av transitiva beroenden och sökning efter dubbletter.dart pub publish — publicerar det aktuella paketet på pub.dev. Före publicering kontrollerar det korrektheten av pubspec.yaml, licens och beskrivning.dart pub outdated — visar en lista över föråldrade beroenden med aktuell, önskad och senast tillgänglig version. Motsvarighet till npm outdated.Alla kommandon finns även i förkortad form: dart pub get som dart pub g (inte alla förkortningar). I Flutter-projekt läggs prefixet flutter till framför pub-kommandon: flutter pub get, flutter pub add och så vidare. Flutter-versionen kontrollerar också pluginens kompatibilitet med målplattformen.
pub.dev — det centrala paketregistret för Dart- och Flutter-ekosystemet. I januari 2025 hade över 50 000 paket publicerats där, med totalt över 10 miljarder nedladdningar. Varje paket har en sida med beskrivning, dokumentation, popularitetsbetyg (Popularity), Pub Points-poäng och versioner.
Pub Points — ett automatiskt system för att bedöma paketkvalitet från 0 till 130 poäng. Följande beaktas: förekomst av licens, beskrivning, exempel, kompatibilitet med den senaste stabila Dart-versionen, frånvaro av sårbarheter, testtäckning, korrekthet i formatering. Hög poäng ökar paketets synlighet i sökresultat och användarnas förtroende.
Publiceringsprocessen omfattar flera steg:
pubspec.yaml: förekomst av name, description, version, license (rekommenderar att ange SPDX-identifierare, t.ex. MIT).dart pub publish --dry-run — simulering av publicering utan att skicka till servern, visar alla filer som kommer att inkluderas i paketet och möjliga fel.dart pub publish öppnar webbläsaren för OAuth-autentisering.Viktiga regler: endast paket med unikt namn kan publiceras; en publicerad version kan inte tas bort (kan endast döljas — dart pub unpublish — inom 7 dagar); för stora uppdateringar måste reglerna för Semantic Versioning följas, den offentliga API:n får inte brytas utan att ändra huvudversionen.
Vanliga frågor
dart pub get och dart pub upgrade?pub get laddar ner versioner från befintlig pubspec.lock utan att ändra den (om lock-fil inte finns — skapar den). pub upgrade ignorerar lock-filen och löser alla beroenden på nytt enligt det senaste kompatibla intervallet och skriver sedan över lock-filen.
Använd ett sökvägsberoende: dependencies: my_package: path: ../my_package. Sökvägen anges relativt projektets rot. Ett sådant beroende registreras inte i pubspec.lock — vid varje bygg hämtar pub det aktuella innehållet i katalogen.
Uppdatera de konflikerande paketen till versioner med överlappande intervall. Om det inte är möjligt — använd tillfälligt dependency_overrides i pubspec.yaml eller ersätt ett av paketen med ett alternativ. Det är användbart att köra dart pub deps för visualisering av beroendeträdet.
pubspec.lock fastställer exakta versioner av alla beroenden (direkta och transitiva) och säkerställer reproducerbart bygge på alla utvecklarmaskiner och i CI/CD. Utan det kan varje körning av pub get välja något olika versioner på grund av nya patch-versioner.
Kör dart pub publish --dry-run för preliminär kontroll, sedan dart pub publish. Vid första publiceringen krävs auktorisering via Google. Paketet måste ha ett unikt namn, beskrivning, licens och korrekt version.
Pub Points — ett kvalitetsbedömningssystem från 0 till 130. Poängen kan förbättras genom att lägga till licens (MIT, Apache-2.0), utökad beskrivning, användningsexempel, tester, bibehålla kompatibilitet med den senaste Dart-versionen och korrigera syntaxanmärkningar från analysatorn.
Sammanfattning
pub get till pub publish täcker hela livscykeln för pakethanteringVi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också