Cli: [BUG] Skriptausführung des Arbeitsbereichspakets npm 7

Erstellt am 6. Okt. 2020  ·  5Kommentare  ·  Quelle: npm/cli

Aktuelles Verhalten:

Bei einem Paket mit mehreren Arbeitsbereichen installiert npm install alle Pakete des Stammverzeichnisses und der Arbeitsbereichspakete im Stammverzeichnis node_modules . Im Gegensatz zu Garn werden keine Abhängigkeiten der Arbeitsbereichspakete in das jeweilige Arbeitsbereichspaket node_modules installiert. Das heißt, es ist nicht möglich, Skripte direkt auszuführen, wenn das aktuelle Arbeitsverzeichnis ein Unterpaket ist.

Außerdem scheint es noch keinen npm workspace -Befehl zum Ausführen von Skripten aus Arbeitsbereichspaketen zu geben (vergleiche mit yarn workspace ).

Erwartetes Verhalten:

In diesem Blog-Beitrag wurde erwähnt, dass die Funktion npm workspaces ähnlich wie die von Garn funktionieren sollte:

npm v7 wird mindestens die Arbeitsbereichsfunktionen von Yarn unterstützen und die Voraussetzungen für erweiterte Arbeitsbereichsfunktionen in Version 8 schaffen.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019

Ich würde erwarten, entweder:

  1. Führen Sie npm workspace @me/workspace-package1 my-script , um das Skript my-script im Arbeitsbereichspaket @me/workspace-package1 auszuführen (z. B. in packages / package1).
  2. CD in ein Workspace-Paket und führen Sie direkt ein Skript von dort aus: cd packages/package1 && npm run my-script

Schritte zum Reproduzieren:

Ich habe einen Workspace-Spielplatz erstellt, um mit Workspace-Paketen zu experimentieren und Garn und npm7 zu vergleichen:
https://github.com/fabb/npm7-workspaces

  1. Führen Sie im Repo npm install (erfolgreich)
  2. Im Terminal cd applications/app1 && npm run build
  3. Der Build schlägt fehl, weil tsc nicht gefunden werden kann

Versuchen Sie es jetzt mit Garn:

  1. Führen Sie im Repo yarn (erfolgreich)
  2. Im Terminal cd applications/app1 && yarn run build
  3. Der Build ist erfolgreich

Alternativ mit Garn:

  1. Führen Sie im Repo yarn (erfolgreich)
  2. Im Terminal yarn workspace @fabb/app1 build
  3. Der Build ist erfolgreich

Umgebung:

  • Betriebssystem: macOS Catalina 10.15.7
  • Knoten: v12.18.0
  • npm: 7.0.0-rc.2

verbunden

RFC für Arbeitsbereiche: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

Hilfreichster Kommentar

Obwohl nicht ideal; Bis dieses Problem behoben ist, besteht eine Problemumgehung darin, die Option --prefix (siehe Dokumente ).

Verwenden Sie beispielsweise die Schritte von npm7-Arbeitsbereichen zu reproduzieren, und ersetzen Sie den Befehl von Schritt 2 durch den folgenden:

npm run --prefix applications/app1 build

Der Build ist erfolgreich:

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

Alle 5 Kommentare

Ich hatte eine Frage zur Funktion npm7 workspaces. Wenn ich ein Paket nur in einem bestimmten Arbeitsbereich installieren musste, wie lautet der Befehl npm, um dies zu tun. Yarn und Lerna unterstützen dies beide.

Nehmen Sie die folgenden Arbeitsbereiche an.

{
  "workspaces": ["packages/*"]
}
root
+ -- packages
  + -- package-a
  + -- package-b

Garn

$ yarn workspace package-a add react

Lerna

LERNA unterstützt Lerna hinzufügen Filteroptionen

$ lerna add react --scope=package-a

Eine Frage. Benötigen npm-Arbeitsbereiche wie Garn auch, dass das Root-Paket "private": true ? Die Dokumentation sollte Informationen dazu enthalten.

Obwohl nicht ideal; Bis dieses Problem behoben ist, besteht eine Problemumgehung darin, die Option --prefix (siehe Dokumente ).

Verwenden Sie beispielsweise die Schritte von npm7-Arbeitsbereichen zu reproduzieren, und ersetzen Sie den Befehl von Schritt 2 durch den folgenden:

npm run --prefix applications/app1 build

Der Build ist erfolgreich:

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

Eine Frage. Benötigen npm-Arbeitsbereiche wie Garn auch, dass das Root-Paket "private": true ? Die Dokumentation sollte Informationen dazu enthalten.

@detj nein, soweit ich es getestet habe nicht.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen