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
).
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:
npm workspace @me/workspace-package1 my-script
, um das Skript my-script
im Arbeitsbereichspaket @me/workspace-package1
auszuführen (z. B. in packages / package1).cd packages/package1 && npm run my-script
Ich habe einen Workspace-Spielplatz erstellt, um mit Workspace-Paketen zu experimentieren und Garn und npm7 zu vergleichen:
https://github.com/fabb/npm7-workspaces
npm install
(erfolgreich)cd applications/app1 && npm run build
tsc
nicht gefunden werden kannVersuchen Sie es jetzt mit Garn:
yarn
(erfolgreich)cd applications/app1 && yarn run build
Alternativ mit Garn:
yarn
(erfolgreich)yarn workspace @fabb/app1 build
RFC für Arbeitsbereiche: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
Der Link zu den RFC-Arbeitsbereichen lautet https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
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
$ yarn workspace package-a add react
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.
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:
Der Build ist erfolgreich: