Ответ
pubspec.lock — это автоматически генерируемый файл, который фиксирует точные версии всех зависимостей (включая транзитивные — зависимости ваших зависимостей), используемые в проекте. Его основная цель — обеспечить воспроизводимость сборок.
Как он работает:
- Когда вы запускаете
flutter pub get, менеджер пакетов Pub читаетpubspec.yaml, где указаны желаемые версии (например,bloc: ^8.0.0). - Pub разрешает зависимости, выбирая конкретные, совместимые версии всех пакетов.
- Результат этого разрешения (конкретные номера версий, источники пакетов и их хэши) записывается в
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, где его коммитить не нужно.