← Назад к вопросам

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

1.0 Junior🔥 111 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между dependencies и dev dependencies

Dependencies и dev dependencies — это два типа зависимостей в pubspec.yaml файле Flutter/Dart проекта. Они различаются по своему назначению, времени использования и включению в финальное приложение.

Основные различия

Dependencies (обычные зависимости)

Это библиотеки, которые:

  • Необходимы для работы приложения в production
  • Используются в коде приложения во время выполнения
  • Включаются в финальный build (APK, IPA, веб-приложение)
  • Увеличивают размер приложения
  • Должны быть совместимы с конечным пользователем

Примеры:

  • http — для HTTP запросов
  • provider — для управления состоянием
  • firebase_core — для Firebase интеграции
  • intl — для интернационализации
  • uuid — для генерации UUID

Dev Dependencies (зависимости разработки)

Это инструменты и библиотеки, которые:

  • Нужны только во время разработки и тестирования
  • Не включаются в финальный build приложения
  • Используются для тестирования, анализа кода, генерации кода
  • Не влияют на размер production приложения
  • Не нужны конечному пользователю

Примеры:

  • flutter_test — для написания тестов
  • mockito — для создания mock объектов
  • build_runner — для генерации кода
  • analyzer — для анализа качества кода
  • test — для unit тестирования

Пример pubspec.yaml

В pubspec.yaml файле зависимости разделены на две секции:

name: my_flutter_app
version: 1.0.0

environment:
  sdk: '>=3.0.0 <4.0.0'
  flutter: '>=3.10.0'

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0
  provider: ^6.0.0
  firebase_core: ^2.24.0
  shared_preferences: ^2.2.0
  uuid: ^4.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  test: ^1.24.0
  mockito: ^5.4.0
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  flutter_lints: ^3.0.0

Практические примеры использования

1. Инициализация проекта

Когда вы создаёте новый Flutter проект, Флаттер автоматически добавит базовые зависимости с разделением на основные и dev.

2. Добавление зависимостей

# Добавить обычную зависимость (production)
flutter pub add http

# Добавить dev dependency
flutter pub add --dev mockito
flutter pub add --dev build_runner

3. Установка всех зависимостей

# Установить все зависимости (обе категории)
flutter pub get

Влияние на размер приложения

Production build (APK/IPA):

В финальное приложение включаются ТОЛЬКО зависимости из dependencies секции. Dev dependencies полностью исключены из build, что значительно снижает размер приложения.

Добавление лишних библиотек в dev_dependencies вместо dependencies напрямую экономит мегабайты в продакшене.

Как определить, что нужно куда

Это должно быть в dependencies если:

  • Вы импортируете его в основной код: import 'package:http/http.dart'
  • Приложение не запустится без него
  • Нужно пользователю для работы приложения
  • Это часть runtime логики вашего приложения
import 'package:http/http.dart' as http;
import 'package:provider/provider.dart';
import 'package:uuid/uuid.dart';

class UserService {
  Future<User> fetchUser() async {
    final response = await http.get(...); // http нужен в production
  }
}

Это должно быть в dev_dependencies если:

  • Используется только для тестирования
  • Используется только при разработке
  • Нужно для генерации кода (build_runner, json_serializable)
  • Никогда не импортируется в основной код приложения
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';

void main() {
  test('user service test', () {
    final mockHttp = MockClient();
  });
}

Версионирование зависимостей

Синтаксис версий:

# Точная версия
http: 1.1.0

# Диапазон совместимости
http: ^1.1.0  # >= 1.1.0, < 2.0.0

# Диапазон
http: '>=1.1.0 <2.0.0'

# Для dev dependencies обычно используют ^version
mockito: ^5.4.0

Типичные dev dependencies

dev_dependencies:
  flutter_test:        # Тестирование UI
    sdk: flutter
  test:                # Unit тесты
  mockito:             # Mock объекты для тестов
  build_runner:        # Генерация кода
  json_serializable:   # JSON сериализация
  freezed:             # Immutable классы
  flutter_lints:       # Анализ качества кода
  integration_test:    # E2E тесты
    sdk: flutter

Команды для работы с зависимостями

# Показать все зависимости с графом
flutter pub deps

# Обновить все зависимости
flutter pub upgrade

# Проверить устаревшие зависимости
flutter pub outdated

# Удалить зависимость
flutter pub remove package_name

# Очистить pub cache
flutter pub cache clean

Best Practices

Делайте:

  • Добавляйте тестовые библиотеки в dev_dependencies
  • Добавляйте инструменты анализа кода в dev_dependencies
  • Минимизируйте количество production зависимостей
  • Регулярно обновляйте зависимости
  • Проверяйте лицензии перед добавлением

Не делайте:

  • Не добавляйте лишние зависимости
  • Не используйте dev dependencies в production коде (IDE предупредит)
  • Не добавляйте дублирующиеся функции
  • Не игнорируйте обновления безопасности

Практический пример неправильного разделения

# ❌ Неправильно
dependencies:
  test: ^1.24.0           # Это dev
  mockito: ^5.4.0         # Это dev
  flutter_lints: ^3.0.0   # Это dev
  http: ^1.1.0            # Это production

dev_dependencies:
  flutter_test:
    sdk: flutter

# ✅ Правильно
dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0
  provider: ^6.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  test: ^1.24.0
  mockito: ^5.4.0
  flutter_lints: ^3.0.0

Вывод

Dependencies — необходимые библиотеки для работы приложения в production.

Dev dependencies — инструменты разработки, которые остаются только на машине разработчика.

Правильное разделение критично для:

  • Минимизации размера приложения
  • Ускорения сборки
  • Улучшения управления зависимостями
  • Обеспечения безопасности (меньше уязвимостей в production)
  • Чистоты архитектуры проекта