Irbisa · Шпаргалка
Пакеты и зависимости
Ограничения версий, pubspec.lock, разрешение версий, overrides, публикация, melos, апгрейды
Чем Dart-пакет отличается от Flutter-пакета и от Flutter-плагина?
# A plugin's pubspec.yaml: the `plugin:` block is what makes it onename: battery_levelenvironment: sdk: ^3.9.0 flutter: '>=3.35.0'…Чем отличаются
dependencies,dev_dependenciesиdependency_overridesвpubspec.yaml?dependencies: dio: ^5.9.0 json_annotation: ^4.9.0 # lib/ imports the annotations dev_dependencies: build_runner: ^2.5.0 # runs on your machine and in CI only…Нужно ли коммитить
pubspec.lockи отличается ли ответ для приложения и для публикуемого пакета?Чем отличаются
pub get,pub upgradeиpub upgrade --major-versions?$ flutter pub outdated# Package Current Upgradable Resolvable Latest# dio 5.7.0 5.9.0 5.9.0 5.9.0# acme_analytics 1.9.4 1.9.6 2.3.0 2.3.0 $ flutter pub get # dio stays on 5.7.0: the lock wins…Какие версии pub может выбрать для каждого ограничения ниже и почему
intlне берёт 0.21.0, аdioпереезжает на 5.9.0?dependencies: dio: ^5.7.0 intl: ^0.20.2 uuid: 4.5.1 web_socket_channel: '>=3.0.0 <3.0.3' crypto: anyКаковы компромиссы hosted-,
path- иgit-зависимостей и когда допустимо указать ветку на GitHub?dependencies: dio: ^5.9.0 # hosted on pub.dev acme_domain: path: ../packages/acme_domain # inside this repo only…Как разделять приватные пакеты между несколькими приложениями компании?
# The shared package: can only ever be published to the private servername: acme_uiversion: 3.2.0publish_to: https://pub.acme.internal ---…flutter pub getпадает с «version solving failed» и длинной цепочкой «Because…». Как найти и исправить настоящий конфликт?$ flutter pub getBecause every version of flutter_localizations from sdk depends on intl 0.20.2 and acme_analytics >=2.1.0 depends on intl ^0.21.0, flutter_localizations from sdk is incompatible with acme_analytics >=2.1.0.So, because checkout_app depends on both flutter_localizations from sdk and acme_analytics ^2.1.0, version solving failed.…Что на самом деле отключает
dependency_overridesи почему это крайняя мера?dependencies: acme_analytics: ^2.1.0 # needs intl ^0.21.0 flutter_localizations: sdk: flutter # pins intl exactly # wrong: pub get is green, the combination is untested…После обновления Flutter
pub getпадает с «requires SDK version >=2.7.0 <3.0.0» на чужом пакете. Что произошло и какие есть варианты?Ваш пакет на версии 1.2.0, и следующий релиз вносит три изменения ниже. Это patch, minor или major?
// acme_toast 1.2.0, publishedclass Toast { Toast({required this.message, this.seconds = 3}); final String message; final int seconds;} enum ToastStyle { info, error } // Next release:// 1. Toast's constructor gains `required this.icon`.// 2. ToastStyle gains a third value, `warning`.// 3. A new top-level function `showToast(Toast toast)` is added.Как структурировать, версионировать и опубликовать пакет на pub.dev и что уже нельзя отменить?
acme_result/ lib/ acme_result.dart # public API: export 'src/result.dart' show Result; src/ result.dart # implementation, never imported by consumers example/…Что меняют pub workspaces в монорепозитории и зачем ещё нужен Melos?
# pubspec.yaml at the repo rootname: acme_workspacepublish_to: noneenvironment: sdk: ^3.9.0workspace:…Транзитивная зависимость, которую вы не выбирали, выпустила сломанный патч, и сборка начала падать. Что вы делаете первым делом?
# 1) What moved, and who pulls it in?git diff HEAD~1 -- pubspec.lock | grep -A3 broken_jsonflutter pub deps --style=compact | grep broken_json # 2) Back to the last good resolutiongit checkout HEAD~1 -- pubspec.lock # or the last known-good commit…Почему один плагин вроде
path_providerразбит на pub.dev на несколько пакетов и от какого из них зависит ваше приложение?# bar_scanner/pubspec.yaml: the app-facing packagedependencies: flutter: { sdk: flutter } bar_scanner_platform_interface: ^2.0.0 bar_scanner_android: ^2.1.0 # endorsed: lands in every consumer bar_scanner_ios: ^2.1.0…Двум пакетам в вашем pub workspace (или одному приложению) нужны разные major-версии одной зависимости. Почему pub не даст каждому свою копию и как выбраться?
Команда обновляет зависимости дважды в год, и каждый раунд оборачивается днями тушения пожаров. Как сделать обновления рутиной?
# .github/dependabot.ymlversion: 2updates: - package-ecosystem: pub directory: / schedule:…Как перевести приложение на новый релиз Flutter с ломающими изменениями?
# On a dedicated branch, with the version pinned for everyonefvm use 3.38.0 # writes .fvmrc; CI reads the same file fvm flutter pub upgrade # plugins often need releases for the new SDKfvm flutter pub outdated…Ключевой для приложения пакет не выпускался два года и теперь блокирует обновление Dart SDK: форкнуть, завендорить или заменить?