Ein Tool zum Verwalten von JavaScript-Projekten mit mehreren Paketen.

  • Über
  • Erste Schritte
  • Wie es funktioniert
  • Fehlerbehebung
  • Befehle
  • Verschiedenes
  • Lerna.json
  • Flags

Über

Das Aufteilen großer Codebasen in separate, unabhängig versionierte Pakete ist äußerst nützlich für die gemeinsame Nutzung von Code. Das Vornehmen von Änderungen in vielen Repositorys ist jedoch unordentlich und schwer zu verfolgen, und das Testen in verschiedenen Repositorys wird sehr schnell kompliziert.

Um diese (und viele andere) Probleme zu lösen, organisieren einige Projekte ihre Codebasen in Multi-Paket-Repositorys (manchmal auch Monorepos genannt). Projekte wie Babel, React, Angular, Ember, Meteor, Jest und viele andere entwickeln alle ihre Pakete in einem einzigen Repository.

Lerna ist ein Tool, das den Workflow rund um die Verwaltung von Multi-Paket-Repositories mit git und npm optimiert.

Lerna kann auch den Zeit- und Platzbedarf für zahlreiche Kopien von Paketen in Entwicklungs- und Build-Umgebungen reduzieren – normalerweise ein Nachteil der Aufteilung eines Projekts in viele separate NPM-Pakete. Einzelheiten finden Sie in der Hoist-Dokumentation.

Wie sieht ein Lerna Repo aus?

Es gibt eigentlich sehr wenig zu tun. Sie haben ein Dateisystem, das so aussieht:

my-lerna-repo/ package.json packages/ package-1/ package.json package-2/ package.json

Was kann Lerna?

Die beiden Hauptbefehle in Lerna sind lerna bootstrap und lerna publish.

bootstrap verknüpft Abhängigkeiten im Repo miteinander. publish hilft bei der Veröffentlichung aktualisierter Pakete.

Erste Schritte

Die folgenden Anweisungen gelten für Lerna 2.x. Wir empfehlen, es anstelle von 1 zu verwenden.x für ein neues Lerna-Projekt. Überprüfen Sie das Wiki, wenn Sie das sehen müssen 1.x README.

Beginnen wir mit der globalen Installation von Lerna mit npm.

$ npm install --global lerna

Als nächstes erstellen wir ein neues Git-Repository:

$ git init lerna-repo$ cd lerna-repo

Und jetzt machen wir daraus ein Lerna-Repo:

$ lerna init

Ihr Repository sollte jetzt so aussehen:

lerna-repo/ packages/ package.json lerna.json

Dadurch wird eine lerna.json -Konfigurationsdatei sowie ein packages -Ordner erstellt.

Funktionsweise

Mit Lerna können Sie Ihr Projekt in einem von zwei Modi verwalten: Fest oder Unabhängig.

Fester / Gesperrter Modus (Standard)

Fester Modus Lerna-Projekte arbeiten mit einer einzigen Versionszeile. Die Version wird in der Datei lerna.json im Stammverzeichnis Ihres Projekts unter dem Schlüssel version gespeichert. Wenn Sie lerna publish ausführen und ein Modul seit dem letzten Release aktualisiert wurde, wird es auf die neue Version aktualisiert, die Sie veröffentlichen. Dies bedeutet, dass Sie nur dann eine neue Version eines Pakets veröffentlichen, wenn Sie dies benötigen.

Dies ist der Modus, den Babel derzeit verwendet. Verwenden Sie diese Option, wenn Sie alle Paketversionen automatisch miteinander verknüpfen möchten. Ein Problem bei diesem Ansatz ist, dass eine größere Änderung in einem Paket dazu führt, dass alle Pakete eine neue Hauptversion haben.

Unabhängiger Modus (–independent)

Unabhängiger Modus Lerna projects ermöglicht es Betreuern, Paketversionen unabhängig voneinander zu erhöhen. Jedes Mal, wenn Sie veröffentlichen, erhalten Sie eine Eingabeaufforderung für jedes Paket, das geändert wurde, um anzugeben, ob es sich um eine Patch-, Minor-, Major- oder benutzerdefinierte Änderung handelt.

Der unabhängige Modus ermöglicht es Ihnen, Versionen für jedes Paket spezifischer zu aktualisieren, und ist für eine Gruppe von Komponenten sinnvoll. Die Kombination dieses Modus mit etwas wie Semantic-Release würde es weniger schmerzhaft machen. (Daran wird bereits bei atlassian / lerna-semantic-release gearbeitet).

Die Taste version in lerna.json wird im unabhängigen Modus ignoriert.

Fehlerbehebung

Wenn Sie bei der Verwendung von Lerna auf Probleme stoßen, lesen Sie bitte unser Dokument zur Fehlerbehebung, in dem Sie möglicherweise die Antwort auf Ihr Problem finden.

Häufig gestellte Fragen

Siehe FAQ.md .

Befehle

init

$ lerna init

Erstellen Sie ein neues Lerna-Repo oder aktualisieren Sie ein vorhandenes Repo auf die aktuelle Version von Lerna.

Lerna geht davon aus, dass das Repo bereits mit git init initialisiert wurde.

Wenn dieser Befehl ausgeführt wird, wird:

  1. Fügen Sie lerna als devDependency in package.json hinzu, falls es noch nicht vorhanden ist.
  2. Erstellen Sie eine lerna.json -Konfigurationsdatei zum Speichern der version -Nummer.

Beispielausgabe auf einem neuen Git-Repo:

$ lerna initlerna info version v2.0.0lerna info Updating package.jsonlerna info Creating lerna.jsonlerna success Initialized Lerna files

— unabhängig, -i

$ lerna init --independent

Dieses Flag weist Lerna an, den unabhängigen Versionierungsmodus zu verwenden.

–exact

$ lerna init --exact

Standardmäßig verwendet lerna init einen Caret-Bereich, wenn die lokale Version von lerna hinzugefügt oder aktualisiert wird, genau wie npm install --save-dev lerna.

, Um die lerna 1 beizubehalten.x Verhalten des „exakten“ Vergleichs, übergeben Sie dieses Flag. Es wird lerna.json so konfiguriert, dass eine genaue Übereinstimmung für alle nachfolgenden Ausführungen erzwungen wird.

{ "lerna": "2.0.0", "command": { "init": { "exact": true } }, "version": "0.0.0"}

bootstrap

$ lerna bootstrap

Bootstrap der Pakete im aktuellen Lerna-Repo. Installiert alle ihre Abhängigkeiten und verknüpft alle Querabhängigkeiten.

Wenn dieser Befehl ausgeführt wird, wird:

  1. npm install alle externen Abhängigkeiten jedes Pakets.
  2. Symlink zusammen alle Lerna packages, die Abhängigkeiten voneinander sind.
  3. npm prepublish alle Bootstrap-Pakete.

lerna bootstrap respektiert die --ignore, --scope und --include-filtered-dependencies Flags (siehe Flags).

Übergeben Sie zusätzliche Argumente an den npm-Client, indem Sie sie nach --:

$ lerna bootstrap -- --production --no-optional

Kann auch konfiguriert werden in lerna.json:

{ ... "npmClient": "yarn", "npmClientArgs": }

Wie bootstrap funktioniert

Verwenden wir babel als Beispiel.

  • babel-generator und source-map (unter anderem) sind Abhängigkeiten von babel-core .
  • babel-core‚ s package.json listet diese beiden Pakete als Schlüssel in dependencies auf, wie unten gezeigt.
// babel-core package.json{ "name": "babel-core", ... "dependencies": { ... "babel-generator": "^6.9.0", ... "source-map": "^0.5.0" }}
  • Lerna prüft, ob jede Abhängigkeit auch Teil des Lerna-Repos ist.
    • In diesem Beispiel kann babel-generator eine interne Abhängigkeit sein, während source-map immer eine externe Abhängigkeit ist.
    • Die Version von babel-generator in der package.json von babel-core wird von packages/babel-generator erfüllt, wobei eine interne Abhängigkeit übergeben wird.
    • source-map ist npm install ed (oder yarned) wie normal.
  • packages/babel-core/node_modules/babel-generator symlinks zu packages/babel-generator
  • Dies ermöglicht verschachtelte Verzeichnisimporte

Anmerkungen:

  • Wenn eine Abhängigkeitsversion in einem Paket von einem Paket mit demselben Namen im Repo nicht erfüllt wird, ist es npm install ed (oder yarned) wie normal.
  • Dist-Tags erfüllen wie latest keine Semver-Bereiche.
  • Zirkuläre Abhängigkeiten führen zu zirkulären Symlinks, die sich auf Ihren Editor / Ihre IDE auswirken können.

Webstorm wird gesperrt, wenn zirkuläre Symlinks vorhanden sind. Um dies zu verhindern, fügen Sie node_modules zur Liste der ignorierten Dateien und Ordner in Preferences | Editor | File Types | Ignored files and folders hinzu.

Veröffentlichen

$ lerna publish

Veröffentlichen Sie Pakete im aktuellen Lerna-Projekt. Wenn dieser Befehl ausgeführt wird, führt er Folgendes aus:

Erstellt eine neue Version der Pakete, die aktualisiert wurden. Fordert eine neue Version an. Erstellt ein neues git commit/Tag während der Veröffentlichung in npm.

Genauer gesagt wird dieser Befehl:

  1. Führen Sie das Äquivalent von lerna updated aus, um zu bestimmen, welche Pakete veröffentlicht werden müssen.
  2. Erhöhen Sie ggf. den Schlüssel version in lerna.json.
  3. Aktualisieren Sie die package.json aller aktualisierten Pakete auf ihre neuen Versionen.
  4. Aktualisieren Sie alle Abhängigkeiten der aktualisierten Pakete mit den neuen Versionen, die mit einem Caret (^) angegeben werden.
  5. Erstelle ein neues git Commit und Tag für die neue Version.
  6. Veröffentlichen Sie aktualisierte Pakete in npm.

Lerna veröffentlicht keine Pakete, die als privat markiert sind ("private": true im package.json ).

— exact

$ lerna publish --exact

Wenn mit diesem Flag ausgeführt wird, gibt publish aktualisierte Abhängigkeiten in aktualisierten Paketen genau an (ohne Interpunktion), anstatt als semver kompatibel (mit a ^ ).

Weitere Informationen finden Sie im Paket.json Abhängigkeiten Dokumentation.

–npm-tag

$ lerna publish --npm-tag=next

Wenn mit diesem Flag ausgeführt wird, wird publish mit dem angegebenen npm-dist-Tag in npm veröffentlicht (standardmäßig latest).

Mit dieser Option können Sie eine prerelease oder beta Version veröffentlichen.

Hinweis: das latest -Tag wird verwendet, wenn ein Benutzer npm install my-package ausführt. Um ein anderes Tag zu installieren, kann ein Benutzer npm install [email protected] ausführen.

— canary, -c

$ lerna publish --canary$ lerna publish --canary=beta

Wenn publish mit diesem Flag ausgeführt wird, werden Pakete detaillierter veröffentlicht (pro Commit). Vor der Veröffentlichung in npm wird das neue version -Tag erstellt, indem das aktuelle version verwendet, auf die nächste Nebenversion übertragen, das bereitgestellte Metasuffix hinzugefügt (standardmäßig alpha) und das aktuelle Git-Sha angehängt wird (z. B. 1.0.0 wird 1.1.0-alpha.81e3b443).

Der beabsichtigte Anwendungsfall für dieses Flag ist ein Release auf Commit-Ebene oder ein nächtliches Release.

— konventionelle Commits

$ lerna publish --conventional-commits

Wenn Sie mit diesem Flag ausgeführt werden, verwendet publish die Spezifikation für konventionelle Commits, um die Versionsnummer zu bestimmen und ein ÄNDERUNGSPROTOKOLL zu generieren

–git-remote

$ lerna publish --git-remote upstream

Wenn Sie mit diesem Flag ausgeführt werden, werden die Git-Änderungen von publish an die angegebene Fernbedienung anstelle von origin gesendet.

–skip-git

$ lerna publish --skip-git

Wenn publish mit diesem Flag ausgeführt wird, wird es in npm veröffentlicht, ohne einen der git-Befehle auszuführen.

Nur in npm veröffentlichen; Commit, Tagging und Pushen von Git-Änderungen überspringen (dies betrifft nur die Veröffentlichung).

— skip-npm

$ lerna publish --skip-npm

Wenn publish mit diesem Flag ausgeführt wird, werden alle package.json Paketversionen und Abhängigkeitsversionen aktualisiert, die Pakete werden jedoch nicht in npm veröffentlicht.

Dies war nützlich als Workaround für ein npm-Problem, das inzwischen behoben wurde. Wenn Sie mit README-Änderungen veröffentlichen, verwenden Sie --skip-npm und führen Sie die endgültige npm publish von Hand für jedes Paket aus.

Dieses Flag kann mit --skip-git kombiniert werden, um nur Versionen und Abhängigkeiten zu aktualisieren, ohne zu committen, zu markieren, zu pushen oder zu veröffentlichen.

Nur Versionen und Abhängigkeiten aktualisieren; nicht wirklich veröffentlichen (dies betrifft nur veröffentlichen).

— force-publish

$ lerna publish --force-publish=package-2,package-4# force publish all packages$ lerna publish --force-publish=*

Bei Ausführung mit diesem Flag erzwingt publish die Veröffentlichung der angegebenen Pakete (kommagetrennt) oder aller Pakete mit *.

Dies überspringt die lerna updated -Prüfung auf geänderte Pakete und erzwingt die Aktualisierung eines Pakets, das keine git diff -Änderung hatte.

— ja

$ lerna publish --canary --yes# skips `Are you sure you want to publish the above changes?`

Bei Ausführung mit diesem Flag überspringt publish alle Bestätigungsaufforderungen. Nützlich in Continuous Integration (CI), um die Veröffentlichungsbestätigungsaufforderung automatisch zu beantworten.

–cd-version

Bei Ausführung mit diesem Flag überspringt publish die Versionsauswahlaufforderung (im unabhängigen Modus) und verwendet die nächste angegebene semantische Version. Sie müssen weiterhin das Flag --yes verwenden, um alle Eingabeaufforderungen zu vermeiden. Dies ist nützlich, wenn Build-Systeme ohne Eingabeaufforderungen veröffentlicht werden müssen. Funktioniert sowohl im normalen als auch im unabhängigen Modus.

–pre-id

–repo-version

$ lerna publish --repo-version 1.0.1# applies version and skips `Select a new version for...` prompt

Bei Ausführung mit diesem Flag überspringt publish die Eingabeaufforderung zur Versionsauswahl und verwendet die angegebene Version. Nützlich, um die Benutzereingabeaufforderung zu umgehen, wenn Sie bereits wissen, welche Version veröffentlicht werden soll.

–message, -m

Bei Ausführung mit diesem Flag verwendet publish die bereitgestellte Nachricht, wenn die Versionsaktualisierungen für die Veröffentlichung festgeschrieben werden. Nützlich für die Integration von lerna in Projekte, die erwarten, dass Commit-Nachrichten bestimmten Richtlinien entsprechen, z. B. Projekte, die commitizen und / oder semantic-release verwenden.

Wenn die Nachricht %senthält, wird sie durch die Versionsnummer der neuen globalen Version ersetzt, der ein „v“ vorangestellt ist. Beachten Sie, dass dies nur bei Verwendung des standardmäßigen „festen“ Versionierungsmodus gilt, da es bei Verwendung von --independent keine „globale“ Version gibt.

aktualisiert

$ lerna updated

Überprüfen Sie, welche packages sich seit dem letzten Release geändert haben (das letzte Git-Tag).

Lerna ermittelt das zuletzt erstellte Git-Tag und führt git diff --name-only v6.8.1 aus, um alle Dateien seit diesem Tag zu ändern. Es gibt dann ein Array von Paketen zurück, die eine aktualisierte Datei enthalten.

Beachten Sie, dass die Konfiguration für den Befehl publish auch den Befehl updated betrifft. Zum Beispiel config.publish.ignore

— json

$ lerna updated --json

Bei Ausführung mit diesem Flag gibt updated ein Array von Objekten im folgenden Format zurück:

clean

$ lerna clean

Entfernen Sie das node_modules-Verzeichnis aus allen Paketen.

lerna clean respektiert die Flags --ignore, --scope und --yes (siehe Flags).

diff

$ lerna diff $ lerna diff# diff a specific package$ lerna diff package-name

Diff alle Pakete oder ein einzelnes Paket seit der letzten Version.

Ähnlich wie lerna updated. Dieser Befehl führt git diff aus.

ls

$ lerna ls

Listet alle öffentlichen Pakete im aktuellen Lerna-Repo auf.

lerna ls respektiert die --ignore und --scope Flags (siehe Flags).

–json

$ lerna ls --json

Bei Ausführung mit diesem Flag gibt ls ein Array von Objekten im folgenden Format zurück:

run

Führen Sie in jedem Paket, das dieses Skript enthält, ein npm-Skript aus. Ein doppelter Bindestrich (--) ist erforderlich, um gestrichelte Argumente an die Skriptausführung zu übergeben.

lerna run respektiert die --concurrency, --scope, --ignore, --stream, und --parallel Flags (siehe Flags).

$ lerna run --scope my-component test

Hinweis: Es wird empfohlen, den Gültigkeitsbereich dieses Befehls (und lerna exec, unten) einzuschränken, wenn Sie das Flag --parallel , da das Erzeugen von Dutzenden von Unterprozessen den Gleichmut Ihrer Shell (oder beispielsweise das maximale Dateideskriptorlimit) beeinträchtigen kann. YMMV

exec

$ lerna exec -- <command> # runs the command in all packages$ lerna exec -- rm -rf ./node_modules$ lerna exec -- protractor conf.js

Führen Sie in jedem Paket einen beliebigen Befehl aus. Ein doppelter Bindestrich (--) ist erforderlich, um gestrichelte Flags an den erzeugten Befehl zu übergeben, ist jedoch nicht erforderlich, wenn alle Argumente positionsbezogen sind.

lerna exec respektiert die --concurrency, --scope, --ignore, und --parallel Flags (siehe Flags).

$ lerna exec --scope my-component -- ls -la

Übergeben Sie das Flag --parallel, um lang laufende Prozesse zu erzeugen:

# transpile all modules as they change in every package$ lerna exec --parallel -- babel src -d lib -w

Sie können den Namen des aktuellen Pakets auch über die Umgebungsvariable abrufen LERNA_PACKAGE_NAME:

$ lerna exec -- npm view $LERNA_PACKAGE_NAME

Sie können auch ein Skript im Stammverzeichnis in einer komplizierten Verzeichnisstruktur über die Umgebungsvariable ausführen LERNA_ROOT_PATH:

$ lerna exec -- node $LERNA_ROOT_PATH/scripts/some-script.js

Hinweis: Die Befehle werden parallel mit der angegebenen Parallelität erzeugt (außer mit --parallel ). Die Ausgabe wird durchgeleitet, also nicht deterministisch. Wenn Sie den Befehl in einem Paket nach dem anderen ausführen möchten, verwenden Sie ihn folgendermaßen:

$ lerna exec --concurrency 1 -- ls -la

— flag

$ lerna exec --bail=<boolean> <command>

Dieses Flag gibt an, ob der Befehl exec die Ausführung anhalten soll, wenn ein Fehler auftritt, der von einem der erzeugten Unterprozesse ausgelöst wird. Der Standardwert ist true.

import

$ lerna import <path-to-external-repository>

Importieren Sie das Paket unter <path-to-external-repository> mit Commit-Verlauf in packages/<directory-name>. Ursprüngliche Commit-Autoren, Daten und Nachrichten bleiben erhalten. Commits werden auf den aktuellen Zweig angewendet.

Dies ist nützlich, um bereits vorhandene eigenständige Pakete in einem Lerna-Repo zu sammeln. Jeder Commit wird geändert, um Änderungen relativ zum Paketverzeichnis vorzunehmen. So wird beispielsweise das Commit, das package.json hinzugefügt hat, stattdessen packages/<directory-name>/package.json hinzufügen.

Verschiedenes

Lerna meldet sich in einer lerna-debug.log -Datei (wie npm-debug.log) an, wenn beim Ausführen eines Befehls ein Fehler auftritt.

Lerna bietet auch Unterstützung für Bereichspakete.

Wenn Sie lerna ohne Argumente ausführen, werden alle Befehle / Optionen angezeigt.

lernen.json

{ "lerna": "2.0.0", "version": "1.1.3", "commands": { "publish": { "ignore": }, "bootstrap": { "ignore": "component-*" } }, "packages": }
  • lerna: die aktuelle Version von Lerna wird verwendet.
  • version: die aktuelle Version des Repositorys.
  • commands.publish.ignore: ein Array von Globs, die nicht in lerna updated/publish enthalten sind. Verwenden Sie dies, um zu verhindern, dass eine neue Version unnötig für Änderungen veröffentlicht wird, z. B. um einen README.md -Tippfehler zu beheben.
  • commands.bootstrap.ignore: ein Array von Globs, die beim Ausführen des Befehls lerna bootstrap nicht gestartet werden.
  • commands.bootstrap.scope: ein Array von Globs, das einschränkt, welche Pakete beim Ausführen des Befehls lerna bootstrap gebootet werden.
  • packages: Array von Globs, die als Paketspeicherorte verwendet werden sollen.

Häufige devDependencies

Die meisten devDependencies können bis zur Wurzel eines Lerna-Repos gezogen werden.

Dies hat einige Vorteile:

  • Alle Pakete verwenden die gleiche Version einer bestimmten Abhängigkeit
  • Kann Abhängigkeiten im Stammverzeichnis mit einem automatisierten Tool wie GreenKeeper auf dem neuesten Stand halten
  • Installationszeit für Abhängigkeiten wird reduziert
  • Es wird weniger Speicherplatz benötigt

Beachten Sie, dass devDependencies Bereitstellung von „binären“ ausführbaren Dateien, die von npm verwendete Skripte müssen weiterhin direkt in jedem Paket installiert werden, in dem sie verwendet werden.

Zum Beispiel ist die Abhängigkeit nsp in diesem Fall erforderlich, damit lerna run nsp (und npm run nsp im Paketverzeichnis) ordnungsgemäß funktionieren:

{ "scripts": { "nsp": "nsp" }, "devDependencies": { "nsp": "^2.3.3" }}

Flags

Optionen für Lerna können aus der Konfiguration (lerna.json) oder über die Befehlszeile stammen. Zusätzlich können Optionen in config auf der obersten Ebene leben oder auf bestimmte Befehle angewendet werden.

Beispiel:

{ "lerna": "x.x.x", "version": "1.2.0", "exampleOption": "foo", "command": { "init": { "exampleOption": "bar", } },}

In diesem Fall ist exampleOption „foo“ für alle Befehle außer init, wo es „bar“ ist. In allen Fällen kann es in der Befehlszeile mit --example-option=baz auf „baz“ überschrieben werden.

–concurrency

Wie viele Threads sollen verwendet werden, wenn Lerna die Aufgaben parallelisiert (standardmäßig 4)

$ lerna publish --concurrency 1

— scope

Scopes ein Befehl auf eine Teilmenge von Paketen.

$ lerna exec --scope my-component -- ls -la
$ lerna run --scope toolbar-* test

— seit

Wenn Sie ein Skript oder einen Befehl ausführen, beschränken Sie den Vorgang auf Pakete, die seit dem angegebenen ref aktualisiert wurden. Wenn ref nicht angegeben ist, wird standardmäßig das neueste Tag verwendet.

Listet den Inhalt von Paketen auf, die sich seit dem letzten Tag geändert haben:

$ lerna exec --since -- ls -la

Führen Sie die Tests für alle Pakete aus, die sich seit master geändert haben:

$ lerna run test --since master

Listet alle Pakete auf, die sich seit some-branch:

$ lerna ls --since some-branch

Dies kann besonders nützlich sein, wenn Sie in CI verwendet werden, wenn Sie den Zielzweig erhalten können, in den ein PR gehen wird, da Sie diesen als ref zur --since Option verwenden können. Dies funktioniert gut für PRs, die sowohl in Master- als auch in Feature-Branches gehen.

–ignore

Schließt eine Teilmenge von Paketen aus, wenn ein Befehl ausgeführt wird.

$ lerna bootstrap --ignore component-*

Das Flag ignore kann bei Verwendung mit dem Befehl bootstrap auch in lerna.json unter der Taste commands.bootstrap gesetzt werden. Das Befehlszeilenflag hat Vorrang vor dieser Option.

Beispiel

{ "lerna": "2.0.0", "version": "0.0.0", "commands": { "bootstrap": { "ignore": "component-*" } }}

Hinweis: Der Glob wird mit dem in package.json definierten Paketnamen abgeglichen, nicht mit dem Verzeichnisnamen, in dem sich das Paket befindet.

— include-filtered-dependencies

Hinweis: Dadurch werden die Flags --scope und --ignore überschrieben.

dh Ein Paket, das mit dem Flag --ignore übereinstimmt, wird weiterhin gebootet, wenn es von einem anderen Paket abhängt, das gerade gebootet wird.

Dies ist nützlich für Situationen, in denen Sie ein einzelnes Paket „einrichten“ möchten, das darauf angewiesen ist, dass andere Pakete eingerichtet werden.

$ lerna bootstrap --scope my-component --include-filtered-dependencies# my-component and all of its dependencies will be bootstrapped

— loglevel

Welche Protokollebene gemeldet werden soll. Bei einem Fehler werden alle Protokolle in lerna-debug geschrieben.melden Sie sich im aktuellen Arbeitsverzeichnis an.

Alle Protokolle einer höheren Ebene als die Einstellung werden angezeigt. Der Standardwert ist „info“.

–max-buffer

Legen Sie eine maximale Pufferlänge für jeden zugrunde liegenden Prozessaufruf fest. Nützlich zum Beispiel, wenn jemand ein Repo mit einer größeren Anzahl von Commits importieren möchte, während lerna import ausgeführt wird. In diesem Fall reicht die eingebaute Pufferlänge möglicherweise nicht aus.

–no-sort

Standardmäßig werden alle Tasks für Pakete in topologisch sortierter Reihenfolge ausgeführt, um die Abhängigkeitsbeziehungen der betreffenden Pakete zu berücksichtigen. Zyklen werden auf einer Best-Effort-Basis in einer Weise unterbrochen, die nicht garantiert konsistent über Lerna-Aufrufe hinweg ist.

Topologische Sortierung kann Parallelitätsengpässe verursachen, wenn es eine kleine Anzahl von Paketen mit vielen abhängigen Paketen gibt oder wenn die Ausführung einiger Pakete unverhältnismäßig lange dauert. Die Option --no-sort deaktiviert die Sortierung und führt stattdessen Aufgaben in beliebiger Reihenfolge mit maximaler Parallelität aus.

Diese Option kann auch hilfreich sein, wenn Sie mehrere „Watch“ -Befehle ausführen. Da lerna run Befehle in topologisch sortierter Reihenfolge ausführt, kann es am Ende auf einen Befehl warten, bevor Sie fortfahren. Dies blockiert die Ausführung, wenn Sie „Watch“ -Befehle ausführen, da diese normalerweise nie enden. Ein Beispiel für einen „watch“ -Befehl ist die Ausführung von babel mit dem --watch CLI-Flag.

–hoist

Installieren Sie externe Abhängigkeiten, die glob entsprechen, im Repo-Stammverzeichnis, damit sie für alle Pakete verfügbar sind. Alle Binärdateien aus diesen Abhängigkeiten werden in abhängige Paketverzeichnisse node_modules/.bin/ verknüpft, sodass sie für npm-Skripte verfügbar sind. Wenn die Option vorhanden ist, aber kein glob angegeben ist, ist der Standardwert ** (alles anheben). Diese Option betrifft nur den Befehl bootstrap.

$ lerna bootstrap --hoist

Hintergrundinformationen zu --hoistfinden Sie in der Hoist-Dokumentation.

Hinweis: Wenn Pakete von verschiedenen Versionen einer externen Abhängigkeit abhängen, wird die am häufigsten verwendete Version angehoben und eine Warnung ausgegeben.

–nohoist

Installieren Sie keine externen Abhängigkeiten, die mit glob übereinstimmen, im Repo-Stammverzeichnis. Dies kann verwendet werden, um das Hoisting für bestimmte Abhängigkeiten zu deaktivieren.

$ lerna bootstrap --hoist --nohoist=babel-*

— npm-client

Installieren Sie externe Abhängigkeiten mit install . Muss eine ausführbare Datei sein, die weiß, wie npm-Abhängigkeiten installiert werden.

$ lerna bootstrap --npm-client=yarn

Kann auch in lerna.json:

{ ... "npmClient": "yarn"}

— use-workspaces

Ermöglicht die Integration mit Yarn Workspaces (verfügbar seit [email protected]+).
Die Werte im Array sind die Befehle, in denen Lerna die Operation an Yarn delegiert (derzeit nur Bootstrapping).
Wenn --use-workspaces wahr ist, wird packages durch den Wert von package.json/workspaces.überschrieben
Kann auch in konfiguriert werden lerna.json:

{ ... "npmClient": "yarn", "useWorkspaces": true}

— stream

Stream-Ausgabe von untergeordneten Prozessen sofort mit dem Präfix des ursprünglichen Paketnamens. Dadurch kann die Ausgabe von verschiedenen Paketen verschachtelt werden.

$ lerna run watch --stream

— parallel

Ähnlich wie --stream, ignoriert jedoch die Parallelität und topologische Sortierung vollständig und führt einen bestimmten Befehl oder ein bestimmtes Skript sofort in allen übereinstimmenden Paketen mit vorangestellter Streaming-Ausgabe aus. Dies ist das bevorzugte Flag für lang laufende Prozesse wie babel src -d lib -w , die über viele Pakete ausgeführt werden.

$ lerna exec --parallel -- babel src -d lib -w

— registry

Wenn Sie mit diesem Flag ausgeführt werden, verwenden weitergeleitete npm-Befehle die angegebene Registry für Ihre Pakete.

Dies ist nützlich, wenn Sie Ihre Registrierungskonfiguration nicht explizit in Ihrem gesamten Paket einrichten möchten.json-Dateien einzeln, wenn z. B. private Register verwendet werden.

–temp-tag

Wenn dieses Flag übergeben wird, wird der Standard-Veröffentlichungsprozess geändert, indem zuerst alle geänderten Pakete in einem temporären dist-Tag (lerna-temp) veröffentlicht und dann die neue (n) Version (en) in das Standard-dist-Tag (latest) verschoben werden.

Dies ist im Allgemeinen nicht erforderlich, da Lerna Pakete standardmäßig in topologischer Reihenfolge veröffentlicht (alle Abhängigkeiten vor Abhängigen).

Assistent

Wenn Sie eine Anleitung für cli bevorzugen (falls Sie lerna verwenden oder einem neuen Team vorstellen möchten), möchten Sie vielleicht lerna-wizard . Es führt Sie durch eine Reihe von genau definierten Schritten:

Aktuelle Schlagwörter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.