Étant donné un package avec plusieurs espaces de travail, npm install
installe tous les packages de la racine et des packages de l'espace de travail à la racine node_modules
. Contrairement à yarn, aucune dépendance des packages d'espace de travail n'est installée dans le package d'espace de travail respectif node_modules
. Cela signifie qu'il n'est pas possible d'exécuter directement des scripts lorsque le répertoire de travail actuel est un sous-paquet.
De plus, il ne semble pas encore exister de commande npm workspace
pour exécuter des scripts à partir de packages d'espace de travail (à comparer à yarn workspace
).
Cet article de blog a mentionné que la fonctionnalité des espaces de travail npm devrait fonctionner de la même manière que celle de yarn:
npm v7 aura au moins la prise en charge des fonctionnalités Workspace de Yarn et préparera le terrain pour des fonctionnalités d'espace de travail plus avancées dans la v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
Je m'attendrais à pouvoir:
npm workspace @me/workspace-package1 my-script
pour exécuter le script my-script
dans le package d'espace de travail @me/workspace-package1
(par exemple situé dans packages / package1)cd packages/package1 && npm run my-script
J'ai créé un terrain de jeu d'espace de travail pour expérimenter avec des packages d'espace de travail et comparer yarn et npm7:
https://github.com/fabb/npm7-workspaces
npm install
(réussit)cd applications/app1 && npm run build
tsc
est introuvableMaintenant, essayez avec du fil:
yarn
(réussit)cd applications/app1 && yarn run build
Alternativement avec du fil:
yarn
(réussit)yarn workspace @fabb/app1 build
RFC pour les espaces de travail: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
Le lien vers le RFC des espaces de travail est https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
J'avais une question concernant la fonctionnalité des espaces de travail npm7. Si je devais installer un package uniquement dans un espace de travail spécifique, quelle est la commande npm pour le faire. Yarn et Lerna le soutiennent tous les deux.
Supposons les espaces de travail suivants.
{
"workspaces": ["packages/*"]
}
root
+ -- packages
+ -- package-a
+ -- package-b
$ yarn workspace package-a add react
lerna add prend en charge les options de filtrage de lerna
$ lerna add react --scope=package-a
Une question. Les espaces de travail npm, comme yarn , nécessitent-ils également que le package racine ait "private": true
? La documentation doit inclure des informations à ce sujet.
Bien que pas idéal; jusqu'à ce que ce problème soit résolu, une solution de contournement consiste à utiliser l'option --prefix
(voir la documentation ).
Par exemple, en utilisant les étapes de @fabb pour reproduire avec le repo npm7-workspaces et en remplaçant la commande de l'étape 2 par la suivante:
npm run --prefix applications/app1 build
La construction réussit:
npm7-workspaces % npm -v
7.0.2
npm7-workspaces % npm run --prefix applications/app1 build
> @fabb/[email protected] build
> tsc index.ts
npm7-workspaces % echo $?
0
Une question. Les espaces de travail npm, comme yarn , nécessitent-ils également que le package racine ait
"private": true
? La documentation doit inclure des informations à ce sujet.
@detj non, pour autant que je l'ai testé, ce n'est pas le cas.
Commentaire le plus utile
Bien que pas idéal; jusqu'à ce que ce problème soit résolu, une solution de contournement consiste à utiliser l'option
--prefix
(voir la documentation ).Par exemple, en utilisant les étapes de @fabb pour reproduire avec le repo npm7-workspaces et en remplaçant la commande de l'étape 2 par la suivante:
La construction réussit: