Cli: [BUG] Exécution du script du package d'espace de travail npm 7

Créé le 6 oct. 2020  ·  5Commentaires  ·  Source: npm/cli

Comportement actuel:

É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 ).

Comportement prévisible:

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:

  1. Exécutez 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)
  2. cd dans un package d'espace de travail et exécutez directement un script à partir de là: cd packages/package1 && npm run my-script

Étapes à suivre pour reproduire:

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

  1. Dans le dépôt, exécutez npm install (réussit)
  2. Dans le terminal cd applications/app1 && npm run build
  3. La compilation échoue car tsc est introuvable

Maintenant, essayez avec du fil:

  1. Dans le dépôt, exécutez yarn (réussit)
  2. Dans le terminal cd applications/app1 && yarn run build
  3. La construction réussit

Alternativement avec du fil:

  1. Dans le dépôt, exécutez yarn (réussit)
  2. Dans le terminal yarn workspace @fabb/app1 build
  3. La construction réussit

Environnement:

  • Système d'exploitation: macOS Catalina 10.15.7
  • Nœud: v12.18.0
  • npm: 7.0.0-rc.2

en relation

RFC pour les espaces de travail: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

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:

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

Tous les 5 commentaires

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

Fil

$ yarn workspace package-a add react

Lerna

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.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Cohen-Carlisle picture Cohen-Carlisle  ·  4Commentaires

DullReferenceException picture DullReferenceException  ·  4Commentaires

FaizenR picture FaizenR  ·  3Commentaires

MadhuriGurumurthy11 picture MadhuriGurumurthy11  ·  3Commentaires

theADAMJR picture theADAMJR  ·  3Commentaires