pubspec.yaml — vad är det, struktur och konfiguration av beroenden i Flutter

Författare: IT Sectr Publicerad: 2026-05-31 Lästid: 8 min

pubspec.yaml — den huvudsakliga konfigurationsfilen för ett Flutter-projekt som definierar metadata, beroenden och applikationens resurser. Den är skriven i YAML-format och bearbetas av Dart-pakethanteraren. Enligt Dart documentation, 2025 påverkar varje rad i denna fil bygge, publicering och versionshantering. pubspec.yaml ersätter Podfile, build.gradle och Info.plist i Flutter-ekosystemet och kombinerar deras funktioner i ett enda manifest.

Huvudpunkter

  • pubspec.yaml beskriver namn, version, beroenden och resurser för ett Flutter-projekt i YAML-format
  • Sektionen dependencies innehåller de viktigaste biblioteken, dev_dependencies — endast för utveckling och testning
  • Assets kopplas genom att ange sökvägar till mappar med bilder, typsnitt och JSON-filer
  • SDK constraints anger den lägsta versionen av Dart och Flutter för projektkompatibilitet
  • YAML-format kräver strikt efterlevnad av indrag med två mellanslag, tabbar är förbjudna

Vad är pubspec.yaml

pubspec.yaml — är en manifestfil i YAML-format som pakethanteraren pub använder för att hantera Dart- och Flutter-projekt. Den finns i projektroten och bearbetas vid varje flutter pub get-kommando. Till skillnad från andra plattformar där konfigurationen är spridd över flera filer, använder Flutter ett centraliserat manifest för alla behov.

Filen innehåller metadata: projektnamn, beskrivning, version, författare. Dessa data används vid publicering av paketet på pub.dev och vid byggning av appen för App Store och Google Play. Fältet description visas i paketets sökresultat, så det bör vara informativt och innehålla nyckelord som andra utvecklare kan använda för att hitta biblioteket.

Utan en korrekt pubspec.yaml kan ett Flutter-projekt inte byggas. Syntaxfel eller felaktiga indrag leder till omedelbart kompileringsfel med meddelandet Error on line X. YAML är känsligt för mellanslag: ett extra mellanslag ändrar datastrukturen och en tabb orsakar ett syntaxfel. Därför är det viktigt att vid manuell redigering av pubspec.yaml använda en editor med YAML-syntaxmarkering, till exempel VS Code med det officiella tillägget för Flutter.

Huvudsektioner i pubspec.yaml

pubspec.yaml består av obligatoriska och valfria sektioner. Varje sektion ansvarar för en specifik aspekt av konfigurationen av projektet. Ordningen på sektionerna är inte viktig, men enligt community-konventionen följs en hierarki: metadata, miljö, beroenden, resurser, plattformar.

name och description

Fältet name anger paketets unika identifierare i snake_case-format, bestående av endast små latinska bokstäver, siffror och understreck. Fältet description — en kort beskrivning av projektet upp till 180 tecken, obligatorisk för publicering på pub.dev. Beskrivningen ska förklara paketets syfte, utan att upprepa namnet, och innehålla nyckelord för sökoptimering av databasen.

yaml
name: my_flutter_app
description: App för uppgiftshantering med Flutter
publish_to: 'none'

version och environment

Fältet version använder semantisk versionshantering major.minor.patch med ett valfritt byggnummer efter plustecknet (1.0.0+1). Sektionen environment anger de lägsta och högsta versionerna av Dart och Flutter SDK för att garantera kompatibilitet. Om en ny version av SDK innehåller kritiska ändringar som är inkompatibla med projektkoden, avbryts kompileringen med ett tydligt felmeddelande.

yaml
version: 1.0.0+1
environment:
  sdk: '>=3.2.0 <4.0.0'
  flutter: '>=3.16.0'

dependencies och dev_dependencies

Sektionen dependencies listar de paket som krävs för att applikationen ska fungera under körning. Sektionen dev_dependencies innehåller paket för testning, kodgenerering och utveckling — de ingår inte i release-bygget. Uppdelningen av beroenden är avgörande för prestanda: varje paket i dependencies ökar storleken på den slutliga APK- eller IPA-filen samt appens starttid på grund av initialisering av ytterligare bibliotek.

yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  cached_network_image: ^3.3.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  mockito: ^5.4.0
  build_runner: ^2.4.0

Konfiguration av assets och typsnitt

Sektionen flutter innehåller undersektioner för konfiguration av resurser, typsnitt och plattformsparametrar. Resurser kopplas via en array paths med angivelse av specifika filer eller hela kataloger. Alla sökvägar anges relativt projektroten, inte relativt pubspec.yaml. Detta är en viktig nyans som ofta orsakar förvirring hos nybörjare inom Flutter.

yaml
flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/icons/
    - assets/config.json
    - assets/data/translations/
  fonts:
    - family: RobotoMono
      fonts:
        - asset: fonts/RobotoMono-Regular.ttf
        - asset: fonts/RobotoMono-Bold.ttf
          weight: 700
        - asset: fonts/RobotoMono-Italic.ttf
          style: italic

Genom att koppla assets via pubspec.yaml görs filerna tillgängliga via AssetBundle under körning. Detta fungerar för bilder, JSON, textfiler och alla andra resurser. Flutter stöder automatiskt olika skärmupplösningar: om du placerar images/2x/ och images/3x/ väljer Flutter rätt version av bilden baserat på enhetens device pixel ratio. För detta räcker det att i assets endast ange rotmappen images/.

Anpassade typsnitt läggs till via sektionen fonts med angivelse av family och lista över typsnitt. Efter ändring av pubspec.yaml måste flutter pub get köras för att tillämpa inställningarna. Typsnitt kan användas både globalt i MaterialApp-temat och lokalt i specifika widgetar. För varje typsnitt kan weight (100-900) och style (normal, italic) anges, vilket gör att Flutter kan välja rätt typsnittsfil vid användning av FontWeight och FontStyle i koden.

Hantering av beroenden och versioner

pub stöder flera sätt att ange källor för beroenden: pub.dev, Git-databaser, lokala sökvägar och privata databaser. Valet av källa beror på utvecklingsstadiet: för stabila versioner används pub.dev, för forks och anpassade ändringar — Git, för parallellt utvecklade bibliotek — lokal sökväg.

KällaSyntaxExempel
Pub.dev^1.0.0http: ^1.2.0
Gitgit: urlgit: https://github.com/user/pkg.git
Lokal sökvägpath: ./libpath: ../my_package
Hostedhosted: namehosted: my_private_repo

Operatorn ^version betyder en kompatibel version: ^1.2.0 tillåter versioner >=1.2.0 och <2.0.0. Detta är analogt med operatorn ~> i CocoaPods och Caret-operatorn i npm. pub löser automatiskt Dependency Hell genom en SAT-lösningsalgoritm som hittar en kombination av versioner som uppfyller alla begränsningar. Om en sådan kombination inte finns, visar pub ett detaljerat meddelande med angivelse av de konflikterande paketen.

Filenen pubspec.lock fastställer de exakta versionerna av beroenden. Den bör lagras i versionskontrollsystemet för applikationer för att säkerställa reproducerbara byggen på alla teamets maskiner. För bibliotek inkluderas pubspec.lock inte i databasen, eftersom biblioteksanvändare bör kunna använda det med olika versioner av beroenden. Kommandot flutter pub upgrade uppdaterar alla beroenden enligt begränsningarna i pubspec.yaml, och flutter pub outdated visar vilka paket som kan uppdateras.

Konfiguration av bygge och publicering

För publicering av appen på pub.dev anges inställningarna i sektionen publish_to. Värdet 'none' förhindrar oavsiktlig publicering av paketet, vilket är viktigt för interna eller icke-offentliga projekt. Om publish_to saknas, försöker pub publicera paketet på standard pub.dev, vilket kan leda till oönskad läckage av kod.

Sektionen flutter innehåller plattformsparametrar: generate för automatisk generering av plattfilsfiler och deferred-components för modulär laddning av funktionalitet. Parametern generate: true gör att Flutter automatiskt skapar och uppdaterar plattformsprojekt (iOS, Android, Web) vid tillägg av nya plattformar via flutter create --platforms. Utan denna parameter kan strukturen på plattformsmapparna desynkroniseras med pubspec.yaml.

yaml
flutter:
  generate: true
  deferred-components:
    - name: photoEditor
      libraries:
        - package:photo_editor/library.dart

Sektionen platforms anger målplattformarna för paketet. För applikationer bestäms den automatiskt vid tillägg av stöd för en specifik plattform via flutter create. Plattformar kan läggas till och tas bort manuellt genom redigering av pubspec.yaml. Deferred Components gör det möjligt att ladda delar av appen på begäran, vilket minskar installationsstorleken — detta är särskilt relevant för spel och applikationer med mycket sällan använt innehåll.

Vid publicering av ett paket kontrollerar pub alla fält i pubspec.yaml för överensstämmelse med kraven i databasen. Avsaknad av obligatoriska fält name, version och description leder till avslag av publiceringen. Dessutom kontrolleras licensens giltighet, förekomsten av README.md och CHANGELOG.md. Paket med fel i kodanalysatorn (dart analyze) klarar inte heller valideringen. Efter framgångsrik publicering blir paketet tillgängligt på pub.dev inom några minuter.

Sektionen dependency_overrides gör det möjligt att tvinga en paketversion, ignorera begränsningar från transitiva beroenden. Detta är en kraftfull men farlig mekanism: vid felaktig användning kan den leda till inkompatibilitet av bibliotek. Använd dependency_overrides endast tillfälligt för att lösa konflikter eller testa nya versioner. Efter att ha åtgärdat de viktigaste beroendena bör override tas bort för att inte störa projektets beroendegraf på lång sikt.

Sektionen executables i pubspec.yaml gör det möjligt att ange körbara skript som pub installerar i PATH vid aktivering av paketet. Detta är användbart för CLI-verktyg skrivna i Dart, till exempel build_runner eller dart_code_metrics. Kommandot dart pub global activate installerar paketet globalt och gör skripten som anges i executables tillgängliga från terminalen. För applikationer används executables vanligtvis inte, eftersom startpunkten bestäms via main i lib/main.dart.

Vanliga frågor

Varför accepterar pubspec.yaml inte tabbar?

YAML-formatet förbjuder användning av tabbtecken för indrag. Använd exakt två mellanslag för varje nivå av nestning. Ett indragsfel leder till ett syntaxfel vid körning av flutter pub get med ett meddelande om ett oväntat tecken. VS Code med Flutter-plugin tillämpar automatiskt korrekta indrag.

Vad är skillnaden mellan dependencies och dev_dependencies?

dependencies ingår i det slutliga bygget av appen och är tillgängliga under körning på användarnas enheter. dev_dependencies används endast i utvecklings- och testfasen — de kommer inte in i release-APK eller IPA. Exempel: flutter_test bör endast finnas i dev_dependencies för att inte öka storleken på produktionsbygget.

Hur uppdaterar jag alla beroenden i pubspec.yaml?

Kommandot flutter pub upgrade uppdaterar alla beroenden till de senaste versionerna som är kompatibla med begränsningarna i pubspec.yaml. För att uppdatera ett enskilt paket, använd flutter pub upgrade . Kommandot flutter pub outdated visar en lista över paket med föråldrade versioner och tillgängliga uppdateringar.

Vad betyder symbolen ^ före paketversionen?

Symbolen ^ indikerar kompatibel versionshantering (caret). ^1.2.0 betyder vilken version som helst från 1.2.0 till 2.0.0 (exklusive 2.0.0). Detta är standardoperatorn för att ange beroenden i pubspec.yaml, som garanterar att du får korrigeringar och mindre uppdateringar utan risk för större API-ändringar.

Behöver jag lägga till pubspec.lock i git?

Ja, för applikationer är pubspec.lock obligatorisk i databasen för att garantera identiska byggen. För bibliotek rekommenderas att inte inkludera den, så att biblioteksanvändare får de senaste kompatibla versionerna av beroenden. Detta är en konvention som liknar reglerna för Gemfile.lock i Ruby och package-lock.json i Node.js.

Sammanfattning

  • pubspec.yaml — manifestet för ett Flutter-projekt i YAML-format som hanterar beroenden, resurser och metadata
  • Sektionerna name, version, environment anger obligatorisk metadata och SDK-begränsningar för kompatibilitet
  • dependencies innehåller huvudpaketen för körning, dev_dependencies — endast för utveckling och testning
  • Assets och typsnitt kopplas via flutter-sektionen med automatiskt val av skärmupplösning
  • Källor för beroenden: pub.dev, Git, lokala sökvägar och privata databaser för olika scenarier
  • pubspec.lock fastställer versioner för reproducerbara byggen på alla teamets maskiner
  • YAML-format kräver indrag med två mellanslag utan tabbar med strukturvalidering vid bygge

Vi 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.

Diskutera projektet

Läs också