Gestion des dépendances Dart
Table des matières
- Concepts fondamentaux
- Contraintes de version
- Workflow : Audit des dépendances
- Workflow : Mise à jour des dépendances
- Workflow : Résolution des conflits de version
- Exemples
Concepts fondamentaux
Dart applique une règle stricte de version unique pour les dépendances : un projet et toutes ses dépendances transitives doivent se résoudre à une seule version partagée de tout paquet donné. Cela prévient les inadéquations de type à l'exécution mais introduit le risque d'un « blocage de version ».
Pour atténuer le blocage de version, Dart s'appuie sur des contraintes de version plutôt que sur des versions épinglées dans le fichier pubspec.yaml. Le fichier pubspec.lock maintient les versions exactes résolues pour des builds reproductibles.
Comprenez les colonnes de sortie de dart pub outdated :
- Current : La version actuellement enregistrée dans
pubspec.lock. - Upgradable : La dernière version autorisée par les contraintes dans
pubspec.yaml.dart pub upgradese résout à celle-ci. - Resolvable : La version absolument la plus récente qui peut être résolue en tenant compte de toutes les autres dépendances du projet.
- Latest : La dernière version publiée du paquet (préversions exclues).
Contraintes de version
- Utilisez la syntaxe Caret : Utilisez toujours la syntaxe caret (par exemple,
^1.2.3) pour les dépendances danspubspec.yaml. Cela permet àpubde sélectionner des versions plus récentes, non-cassantes (jusqu'à, mais sans inclure, la prochaine version majeure) lors de la résolution. - Resserrez les dépendances de développement : Définissez la limite inférieure des
dev_dependenciesà la version exacte actuellement utilisée. Cela réduit la complexité de résolution et empêche les anciens outils de développement incompatibles d'être sélectionnés. - Appliquez les lockfiles en CI : Utilisez
dart pub get --enforce-lockfiledans les pipelines CI/CD pour assurer que les versions exactes testées localement sont utilisées en production.
Workflow : Audit des dépendances
Exécutez ce workflow périodiquement pour identifier les paquets obsolètes qui pourraient impacter la stabilité ou les performances.
Progression des tâches :
- [ ] Exécutez
dart pub outdated. - [ ] Examinez la colonne Upgradable pour identifier les paquets pouvant être mis à jour sans modifier
pubspec.yaml. - [ ] Examinez la colonne Resolvable pour identifier les paquets nécessitant des modifications de contraintes dans
pubspec.yamlpour être mis à jour. - [ ] Identifiez les paquets marqués comme rétractés ou discontinués.
Workflow : Mise à jour des dépendances
Utilisez une logique conditionnelle basée sur les résultats de l'audit pour mettre à jour les dépendances.
Progression des tâches :
- [ ] Si mise à jour vers les versions « Upgradable » :
- [ ] Exécutez
dart pub upgrade. - [ ] Exécutez
dart pub upgrade --tightenpour mettre à jour automatiquement les limites inférieures danspubspec.yamlafin de correspondre aux versions nouvellement résolues.
- [ ] Exécutez
- [ ] Si mise à jour vers les versions « Resolvable » (mises à jour majeures) :
- [ ] Modifiez manuellement
pubspec.yamlpour augmenter la contrainte de version afin de correspondre à la colonne « Resolvable » (par exemple, changez^0.11.0en^0.12.1). - [ ] Exécutez
dart pub upgradepour résoudre les nouvelles contraintes et mettre à jourpubspec.lock.
- [ ] Modifiez manuellement
- [ ] Boucle de rétroaction :
- [ ] Exécutez
dart analyze-> examinez les erreurs -> corrigez les changements d'API cassants. - [ ] Exécutez
dart test-> examinez les échecs -> corrigez les régressions.
- [ ] Exécutez
Workflow : Résolution des conflits de version
Lorsque pub ne peut pas trouver un ensemble de versions concrètes satisfaisant toutes les contraintes, ou lorsqu'il s'agit d'une version de paquet rétractée, manipulez le lockfile de manière chirurgicale.
NE PAS supprimer l'intégralité du fichier pubspec.lock et exécuter dart pub get. Cela provoque des mises à niveau incontrôlées dans tout le graphe de dépendances.
Progression des tâches :
- [ ] Ouvrez
pubspec.lock. - [ ] Localisez le bloc YAML spécifique du paquet en conflit ou rétracté.
- [ ] Supprimez UNIQUEMENT l'entrée de ce paquet du lockfile.
- [ ] Exécutez
dart pub getpour récupérer la version la plus récente compatible et non-rétractée pour ce paquet spécifique. - [ ] Boucle de rétroaction :
- [ ] Exécutez
dart pub deps-> vérifiez que le graphe de dépendances se résout correctement. - [ ] Si la résolution échoue, identifiez la dépendance transitive causant le blocage, mettez à jour sa contrainte dans
pubspec.yaml, et réessayez.
- [ ] Exécutez
Exemples
Resserrage des contraintes
Quand dart pub outdated montre qu'un paquet peut être résolu à une version mineure/patch supérieure, utilisez le flag --tighten pour mettre à jour pubspec.yaml automatiquement.
Entrée (pubspec.yaml) :
dependencies:
http: ^0.13.0
Commande :
dart pub upgrade --tighten http
Sortie (pubspec.yaml) :
dependencies:
http: ^0.13.5
Suppression chirurgicale du lockfile
Si package_a est rétracté ou bloqué dans un conflit, supprimez uniquement son bloc de pubspec.lock.
Avant (pubspec.lock) :
packages:
package_a:
dependency: "direct main"
description:
name: package_a
url: "https://pub.dev"
source: hosted
version: "1.0.0" # Retracted version
package_b:
dependency: "direct main"
# ...
Action : Supprimez intégralement le bloc package_a. Laissez package_b inchangé. Exécutez dart pub get.