Chaque fois que j'ajoute une dépendance à la racine du projet d'espaces de travail:
par exemple.
yarn add assets-webpack-plugin -D
J'obtiens l'erreur suivante:
L'exécution de cette commande ajoutera la dépendance à la racine de l'espace de travail plutôt qu'à l'espace de travail lui-même, ce qui pourrait ne pas être ce que vous voulez - si vous le vouliez vraiment, rendez-le explicite en exécutant à nouveau cette commande avec l'indicateur -W (ou --ignore- workspace-root-check).
L'alternative est de l'ajouter à chaque projet qui en a besoin et ensuite vous aurez le problème de chaque projet ayant des dépendances et des fichiers de verrouillage différents.
Puisque vous utilisez Yarn Workspaces et qu'il gère les dépendances de tous les projets (workspaces), vous devez ajouter des dépendances de chaque projet à son propre package.json
, pas la racine de l'espace de travail. Le fil utilise uniquement unyarn.lock
fichier placé à la racine de l'espace de travail. En outre, il essaie de déplacer les dépendances de tous les projets vers node_modules
de la racine de l'espace de travail pour éviter autant que possible la duplication. Bien que certaines dépendances doivent être placées dans node_modules
de leur propre projet; par exemple. lorsque la racine de l'espace de travail a un devDependency
à [email protected]
alors qu'un projet a une dépendance avec le même package avec une autre version, dites 1.2.5
dont ils ne sont pas compatibles. Supposons que la structure de répertoires de vos espaces de travail soit la suivante:
├── workspace-root
| ├── package.json
| ├── workspace-a
| | ├── package.json
| ├── workspace-b
| | ├── package.json
Après avoir exécuté yarn
à la racine de l'espace de travail ou dans n'importe quel répertoire d'espace de travail, vous aurez la structure de répertoire suivante:
├── workspace-root
| ├── node_modules
| ├── package.json
| ├── yarn.lock
| ├── workspace-a
| | ├── package.json
| | ├── node_modules
| ├── workspace-b
| | ├── package.json
| | ├── node_modules
Ajoutez une dépendance à la racine de l'espace de travail uniquement lorsque vous souhaitez exécuter un script à partir de la racine de l'espace de travail et qu'il a besoin d'une dépendance. Dans ce cas, les projets sont indépendants de cette dépendance, vous pouvez donc ignorer cet avertissement.
Si vous ajoutez les dépendances courantes des projets à la racine de l'espace de travail, elles n'apparaîtront pas dans package.json
des projets. Par conséquent, si vous séparez un projet, il n'aura pas toutes ses dépendances dans son propre package.json
si courant yarn install
pour le projet séparé conduit à ne pas avoir toutes les dépendances dans son propre node_modules
. De toute évidence, le projet séparé ne peut pas fonctionner et vous devez résoudre le problème des dépendances absentes pour résoudre le problème.
Yarn Workspaces est une fonctionnalité permettant de gérer plus facilement les dépendances des projets liés les uns aux autres. Par exemple, lorsque vos projets ont des dépendances similaires, vous pouvez déclarer chaque projet comme un espace de travail. Cela évite beaucoup de duplication. Un autre cas d'utilisation important est monorepos :
Ceux qui ont essayé de diviser un projet en plusieurs packages savent à quel point il est difficile d'apporter des modifications sur plusieurs packages à la fois. Pour faciliter le processus, certains grands projets ont adopté une approche monorepo, ou des référentiels multi-packages, ce qui réduit la charge de l'écriture de code sur les packages.
Plusieurs projets utilisés quotidiennement par les développeurs JavaScript sont gérés comme des monorepos: Babel, React, Jest, Vue, Angular.
L'utilisation des espaces de travail Yarn présente les avantages suivants:
- Il vous permet de configurer plusieurs packages de manière à ce que vous n'ayez à exécuter Yarn Install qu'une seule fois pour tous les installer en une seule passe.
Vos dépendances peuvent être liées entre elles, ce qui signifie que vos espaces de travail peuvent dépendre les uns des autres tout en utilisant toujours le code le plus récent disponible.
C'est aussi un meilleur mécanisme que
yarn link
car il n'affecte que votre arborescence d'espace de travail plutôt que l'ensemble de votre système.Toutes les dépendances de votre projet seront installées ensemble, donnant à Yarn plus de latitude pour mieux les optimiser.
Yarn utilisera un seul fichier de verrouillage plutôt qu'un autre pour chaque projet, ce qui signifie moins de conflits et des révisions plus faciles.
Si vous avez des "espaces de travail" déclarés dans votre package.json; vous avez opté pour les espaces de travail et la configuration doit être correcte. Cela ne semble logique que si vous utilisez un mono-repo. En ce qui concerne cela, un mono-repo est un grand repo avec un package "root" .json où les espaces de travail sont déclarés ainsi que les dépendances de développement. A l'intérieur, il y aura d'autres "packages" (projets avec leur propre package.json, mais pas leur propre repo).
Lorsque vous souhaitez ajouter des packages à ces "espaces de travail" (voir https://yarnpkg.com/lang/en/docs/workspaces/ ) ou "packages" et que vous travaillez à partir du dossier racine , vous devez spécifier l'espace de travail avec lequel vous ciblez l'action Yarn.
S'il s'agit d'une dépendance de développement pour la racine, ce n'est pas un problème. Puisqu'on suppose que votre projet "root" n'aura pas ses propres dépendances "production" et qu'elles ne devraient être que dans les espaces de travail. Si ce n'est pas une dépendance de développement et que vous ne spécifiez pas l'espace de travail ( https://yarnpkg.com/en/docs/cli/workspace ), alors vous verrez l'avertissement et comment remplacer .