Résolutions de dépendance sélectives

Yarn prend en charge les résolutions de version sélectives, ce qui vous permet de définir des versions de packages personnalisés dans vos dépendances via le champ resolutions dans votre fichier package.json. Normalement, cela nécessiterait des modifications manuelles dans le fichier yarn.lock.

Pourquoi voulez-vous faire cela ?

  • Vous pouvez dépendre d’un package qui n’est pas mis à jour fréquemment, qui lui-même dépend d’un autre package qui a obtenu une mise à jour importante. Dans ce cas, si la plage de version spécifiée par votre dépendance directe ne couvre pas la nouvelle version de la sous-dépendance, vous êtes coincé en attendant l’auteur.

  • Une sous-dépendance de votre projet a obtenu une mise à jour de sécurité importante et vous ne voulez pas attendre que votre dépendance directe est publiée une version minimale de mise à jour.

  • Vous comptez sur un package non maintenu mais fonctionnel et l’une de ses dépendances a été mise à jour. Vous savez que la mise à jour ne cassera pas les choses et vous ne voulez pas non plus faire un fork du package sur lequel vous comptez, c’est juste pour mettre à jour une dépendance mineure.

  • Votre dépendance définit une large plage de version et votre sous-dépendance viens de recevoir une mise à jour problématique donc vous souhaitez la bloquer dans une version antérieure.

Comment l’utiliser ?

Ajoutez un champ de resolutions à votre fichier package.json et définissez votre version de substitution :

package.json

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "1.1.2"
  }
}

Exécutez ensuite yarn install.

Trucs & astuces

  • Vous recevez un avertissement si vous définissez une résolution non valide (tel qu’un nom de package non valide)
  • Vous recevez un avertissement si votre version de résolution ou la plage n’est pas valide.
  • Vous recevez un avertissement si votre version de résolution ou la plage n’est pas compatible avec la plage de la version originale.

Limitations & mises en garde

  • Les packages imbriqués peuvent ne pas fonctionner correctement.
  • Certains cas particuliers peuvent ne pas fonctionner correctement puisqu’il s’agit d’une fonctionnalité relativement nouvelle.