pubspec.yaml — что это, структура и конфигурация зависимостей в Flutter

Автор: IT Sectr Опубликовано: 2026-05-31 Время чтения: 8 мин

pubspec.yaml — главный конфигурационный файл Flutter проекта, определяющий метаданные, зависимости и ресурсы приложения. Он написан в формате YAML и обрабатывается менеджером пакетов Dart. По данным Dart documentation, 2025, каждая строка этого файла влияет на сборку, публикацию и версионирование. pubspec.yaml заменяет Podfile, build.gradle и Info.plist в экосистеме Flutter, объединяя их функции в едином манифесте.

Главное

  • pubspec.yaml описывает имя, версию, зависимости и ресурсы Flutter проекта в формате YAML
  • Секция dependencies содержит основные библиотеки, dev_dependencies — только для разработки и тестов
  • Assets подключаются через указание путей к папкам с изображениями, шрифтами и JSON-файлами
  • SDK constraints задают минимальную версию Dart и Flutter для совместимости проекта
  • Формат YAML требует строгого соблюдения отступов в два пробела, табуляция запрещена

Что такое pubspec.yaml

pubspec.yaml — это манифест-файл в формате YAML, который менеджер пакетов pub использует для управления Dart и Flutter проектами. Он находится в корне проекта и обрабатывается при каждой команде flutter pub get. В отличие от других платформ, где конфигурация размазана по нескольким файлам, Flutter использует один централизованный манифест для всех нужд.

Файл содержит метаданные: название проекта, описание, версию, автора. Эти данные используются при публикации пакета на pub.dev и при сборке приложения для App Store и Google Play. Поле description отображается в результатах поиска пакетов, поэтому оно должно быть информативным и содержать ключевые слова, по которым другие разработчики смогут найти библиотеку.

Без корректного pubspec.yaml Flutter проект не может быть собран. Ошибки синтаксиса или неверные отступы приводят к немедленному сбою компиляции с сообщением Error on line X. YAML чувствителен к пробелам: один лишний пробел меняет структуру данных, а табуляция вызывает синтаксическую ошибку. Поэтому при редактировании pubspec.yaml вручную важно использовать редактор с подсветкой YAML-синтаксиса, например VS Code с официальным расширением для Flutter.

Основные секции pubspec.yaml

pubspec.yaml состоит из обязательных и опциональных секций. Каждая секция отвечает за определённый аспект конфигурации проекта. Порядок секций не важен, но по соглашению community соблюдается иерархия: метаданные, окружение, зависимости, ресурсы, платформы.

name и description

Поле name задаёт уникальный идентификатор пакета в формате snake_case, состоящий только из латинских букв в нижнем регистре, цифр и подчёркиваний. Поле description — краткое описание проекта длиной до 180 символов, обязательное для публикации на pub.dev. Описание должно объяснять назначение пакета, не повторяя название, и содержать ключевые слова для поисковой оптимизации репозитория.

yaml
name: my_flutter_app
description: Приложение для управления задачами с Flutter
publish_to: 'none'

version и environment

Поле version использует семантическое версионирование major.minor.patch с опциональным номером сборки после плюса (1.0.0+1). Секция environment задаёт минимальные и максимальные версии Dart и Flutter SDK для гарантии совместимости. Если новая версия SDK содержит критические изменения, несовместимые с кодом проекта, сборка прервётся с понятным сообщением об ошибке.

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

dependencies и dev_dependencies

Секция dependencies перечисляет пакеты, необходимые для работы приложения в runtime. Секция dev_dependencies содержит пакеты для тестирования, генерации кода и разработки — они не входят в релизную сборку. Разделение зависимостей критически важно для производительности: каждый пакет в dependencies увеличивает размер итогового APK или IPA, а также время запуска приложения из-за инициализации дополнительных библиотек.

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

Настройка assets и шрифтов

Секция flutter содержит подсекции для настройки ресурсов, шрифтов и параметров платформы. Ресурсы подключаются через массив paths с указанием конкретных файлов или целых директорий. Все пути указываются относительно корня проекта, а не относительно pubspec.yaml. Это важный нюанс, который часто вызывает путаницу у начинающих разработчиков 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

Подключение assets через pubspec.yaml делает файлы доступными через AssetBundle в runtime. Это работает для изображений, JSON, текстовых файлов и любых других ресурсов. Flutter автоматически поддерживает разные разрешения экрана: если положить images/2x/ и images/3x/, Flutter подберёт нужную версию изображения на основе device pixel ratio устройства. Для этого достаточно указать в assets только корневую папку images/.

Кастомные шрифты добавляются через секцию fonts с указанием family и списком начертаний. После изменения pubspec.yaml требуется выполнить flutter pub get для применения настроек. Шрифты можно использовать как глобально в теме MaterialApp, так и локально в конкретных виджетах. Для каждого начертания можно указать weight (100-900) и style (normal, italic), что позволит Flutter правильно подбирать файл шрифта при использовании FontWeight и FontStyle в коде.

Управление зависимостями и версиями

pub поддерживает несколько способов указания источников зависимостей: pub.dev, Git-репозитории, локальные пути и приватные репозитории. Выбор источника зависит от стадии разработки: для стабильных версий используется pub.dev, для форков и кастомных модификаций — Git, для разрабатываемых параллельно библиотек — локальный путь.

ИсточникСинтаксисПример
Pub.dev^1.0.0http: ^1.2.0
Gitgit: urlgit: https://github.com/user/pkg.git
Локальный путьpath: ./libpath: ../my_package
Hostedhosted: namehosted: my_private_repo

Оператор ^version означает совместимую версию: ^1.2.0 разрешает версии >=1.2.0 и <2.0.0. Это аналог оператора ~> в CocoaPods и Caret-оператора в npm. pub автоматически разрешает Dependency Hell через алгоритм SAT-солвера, который находит комбинацию версий, удовлетворяющую всем ограничениям. Если такой комбинации не существует, pub выдаёт подробное сообщение с указанием конфликтующих пакетов.

Файл pubspec.lock фиксирует точные версии зависимостей. Он должен храниться в системе контроля версий для приложений, чтобы обеспечить воспроизводимые сборки на всех машинах команды. Для библиотек pubspec.lock не включается в репозиторий, так как пользователи библиотеки должны иметь возможность использовать её с разными версиями зависимостей. Команда flutter pub upgrade обновляет все зависимости согласно ограничениям pubspec.yaml, а flutter pub outdated показывает, какие пакеты можно обновить.

Конфигурация сборки и публикации

Для публикации приложения на pub.dev настройки указываются в секции publish_to. Значение 'none' запрещает случайную публикацию пакета, что важно для внутренних или непубличных проектов. Если publish_to отсутствует, pub пытается опубликовать пакет на default pub.dev, что может привести к нежелательной утечке кода.

Секция flutter включает параметры платформ: generate для автоматической генерации платформенных файлов, и deferred-components для модульной загрузки функциональности. Параметр generate: true заставляет Flutter автоматически создавать и обновлять платформенные проекты (iOS, Android, Web) при добавлении новых платформ через flutter create --platforms. Без этого параметра структура платформенных папок может рассинхронизироваться с pubspec.yaml.

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

Секция platforms задаёт целевые платформы для пакета. Для приложений она автоматически определяется при добавлении поддержки конкретной платформы через flutter create. Платформы можно добавлять и удалять вручную через редактирование pubspec.yaml. Deferred Components позволяют загружать части приложения по требованию, уменьшая размер установки — это особенно актуально для игр и приложений с большим количеством редко используемого контента.

При публикации пакета pub проверяет все поля pubspec.yaml на соответствие требованиям репозитория. Отсутствие обязательных полей name, version и description приводит к отклонению публикации. Дополнительно проверяется корректность лицензии, наличие README.md и CHANGELOG.md. Пакеты с ошибками анализатора кода (dart analyze) также не проходят валидацию. После успешной публикации пакет становится доступным на pub.dev в течение нескольких минут.

Секция dependency_overrides позволяет принудительно указать версию пакета, игнорируя ограничения из транзитивных зависимостей. Это мощный, но опасный механизм: при неправильном использовании он может привести к несовместимости библиотек. Используйте dependency_overrides только временно для разрешения конфликтов или тестирования новых версий. После исправления основных зависимостей override следует удалить, чтобы не нарушать граф зависимостей проекта в долгосрочной перспективе.

Секция executables в pubspec.yaml позволяет указывать исполняемые скрипты, которые pub устанавливает в PATH при активации пакета. Это полезно для CLI-инструментов, написанных на Dart, например build_runner или dart_code_metrics. Команда dart pub global activate устанавливает пакет глобально, делая указанные в executables скрипты доступными из терминала. Для приложений executables обычно не используются, так как входная точка определяется через main в lib/main.dart.

Часто задаваемые вопросы

Почему pubspec.yaml не принимает табуляцию?

Формат YAML запрещает символы табуляции для отступов. Используйте ровно два пробела для каждого уровня вложенности. Ошибка отступа приводит к синтаксической ошибке при запуске flutter pub get с сообщением о неожиданном символе. VS Code с плагином Flutter автоматически подставляет правильные отступы.

В чём разница между dependencies и dev_dependencies?

dependencies включаются в финальную сборку приложения и доступны в runtime на устройствах пользователей. dev_dependencies используются только на этапе разработки и тестирования — они не попадают в релизный APK или IPA. Пример: flutter_test должен быть только в dev_dependencies, чтобы не увеличивать размер продакшн-сборки.

Как обновить все зависимости в pubspec.yaml?

Команда flutter pub upgrade обновляет все зависимости до последних версий, совместимых с указанными в pubspec.yaml ограничениями. Для обновления одного пакета используйте flutter pub upgrade <имя_пакета>. Команда flutter pub outdated покажет список пакетов с устаревшими версиями и доступными обновлениями.

Что означает символ ^ перед версией пакета?

Символ ^ обозначает совместимое версионирование (caret). ^1.2.0 означает любую версию от 1.2.0 до 2.0.0 не включая. Это стандартный оператор для указания зависимостей в pubspec.yaml, гарантирующий получение исправлений и минорных обновлений без риска мажорных изменений API.

Нужно ли добавлять pubspec.lock в git?

Да, для приложений pubspec.lock обязателен в репозитории для гарантии идентичных сборок. Для библиотек рекомендуется не включать его, чтобы пользователи библиотеки получали последние совместимые версии зависимостей. Это соглашение аналогично правилам для Gemfile.lock в Ruby и package-lock.json в Node.js.

Итоги

  • pubspec.yaml — манифест Flutter проекта в формате YAML, управляющий зависимостями, ресурсами и метаданными
  • Секции name, version, environment задают обязательные метаданные и ограничения SDK для совместимости
  • dependencies содержат основные пакеты для runtime, dev_dependencies — только для разработки и тестов
  • Assets и шрифты подключаются через секцию flutter с автоматическим подбором разрешений экрана
  • Источники зависимостей: pub.dev, Git, локальные пути и приватные репозитории для разных сценариев
  • pubspec.lock фиксирует версии для воспроизводимых сборок на всех машинах команды
  • Формат YAML требует отступов двумя пробелами без табуляции с валидацией структуры при сборке

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также