Types de dépendances

Les dépendances servent à remplir différents objectifs. Certaines dépendances sont nécessaires pour construire votre projet, d’autres sont nécessaire lorsque votre programme s’exécute. De sorte qu’il existe plusieurs types de dépendances que vous pouvez avoir (par exemple dependencies, devDependencies et peerDependencies).

Votre package.json contiendra toutes ces dépendances :

{
  "name": "mon-projet",
  "dependencies": {
    "package-a": "^1.0.0"
  },
  "devDependencies": {
    "package-b": "^1.2.1"
  },
  "peerDependencies": {
    "package-c": "^2.5.4"
  },
  "optionalDependencies": {
    "package-d": "^3.1.0"
  }
}

La plupart des gens ont uniquement dependencies et devDependencies, mais il est important de comprendre le rôle de chacun de ces types de dépendances.

dependencies

Ce sont les dépendances normales, à savoir celles dont vous avez besoin pour faire tourner votre code (par exemple React ou ImmutableJS).

devDependencies

Ce sont les dépendances pour le développement, des dépendances dont vous aurez besoin à un moment ou un autre lors de la phase de développement, mais pas pour l’exécution du code (par exemple Babel ou Flow).

peerDependencies

Les peer dependencies sont un type spécial de dépendances auquel vous serez confronté qu’à partir du moment où vous publiez votre propre package.

Avoir une dépendance peer signifie que votre package a besoin d’une dépendance qui doit être exactement la même dépendance que la personne qui est en train d’installer votre package. C’est utile pour des packages comme react qui ont besoin d’avoir une seule copie de react-dom qui sera également utilisée par la personne l’installant.

optionalDependencies

Les dépendances optionnelles sont exactement ce qu’elles mentionnent : optionnelles. Si Yarn ne parvient pas à les installer, le processus d’installation sera quand même réussi.

C’est utile pour les dépendances qui ne marchent pas forcément sur toutes les machines et pour lesquelles vous avez une solution alternative dans le cas où elles ne sont pas installées (par exemple Watchman).

bundledDependencies

Tableau de noms de packages qui seront intégrés à votre package lorsque vous le publierez.

Les dépendances de ce type devraient se trouver dans votre projet. La fonctionnalité est essentiellement la même que les dépendances normales. Ces dépendances seront également embarquées en exécutant yarn pack.

Les dépendances normales sont généralement installée depuis le registre npm. Les bundle dependencies sont utiles lors que les dépendances normales ne suffisent pas :

  • Lorsque vous voulez utiliser une bibliothèque tiers qui ne vient pas du registre npm ou bien que vous avez modifiée.
  • Quand vous voulez utiliser vos propres projets comme modules.
  • Lorsque vous voulez distribuer certains fichiers avec votre module.