Что такое файл pubspec.lock в проекте Flutter?

«Что такое файл pubspec.lock в проекте Flutter?» — вопрос из категории Сборка и компиляция, который задают на 44% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

pubspec.lock — это автоматически генерируемый файл, который фиксирует точные версии всех зависимостей (включая транзитивные — зависимости ваших зависимостей), используемые в проекте. Его основная цель — обеспечить воспроизводимость сборок.

Как он работает:

  1. Когда вы запускаете flutter pub get, менеджер пакетов Pub читает pubspec.yaml, где указаны желаемые версии (например, bloc: ^8.0.0).
  2. Pub разрешает зависимости, выбирая конкретные, совместимые версии всех пакетов.
  3. Результат этого разрешения (конкретные номера версий, источники пакетов и их хэши) записывается в pubspec.lock.

Пример содержимого:

packages:
  bloc:
    dependency: "direct main"
    description:
      name: bloc
      url: "https://pub.dartlang.org"
    source: hosted
    version: "8.1.2" # Конкретная версия, а не диапазон из pubspec.yaml

Почему это важно и как я с этим работаю:

  • Консистентность в команде: Все разработчики, склонировав репозиторий и выполнив flutter pub get, получат идентичные версии пакетов, указанные в pubspec.lock. Это предотвращает ошибки из-за расхождений в версиях ("а у меня работает").
  • Стабильность CI/CD: Сборка на сервере будет использовать те же версии, что и на машине разработчика.
  • Контроль обновлений: Чтобы обновить зависимости до новейших версий в рамках заданных ограничений (^), нужно явно запустить flutter pub upgrade. Это обновит и pubspec.lock.

Правило: Файл pubspec.lock всегда должен коммититься в систему контроля версий (Git) для приложений. Исключение — при разработке библиотек/пакетов для публикации на pub.dev, где его коммитить не нужно.