web-dev-qa-db-de.com

npm install package aus dem Unterordner github repo

Ist es möglich, das npm-Paket von github zu installieren, wenn sich das Paket im Unterordner befindet?

Beispielsweise verfügen wir über ein Microsoft BotBuilder-Repository: https://github.com/Microsoft/BotBuilder

Ich muss das Paket jedoch im Unterordner "Node/core /": https://github.com/Microsoft/BotBuilder/tree/master/Node/core/ installieren.

Wie kann ich es mit npm installieren?

18
Ceridan

Zu package.json hinzufügen:

...
"scripts": {
  "postinstall": "mkdir BotBuilder; cd BotBuilder; git init; git remote add -f Origin https://github.com/Microsoft/BotBuilder.git; git config core.sparseCheckout true; echo \"Node/core\" >> .git/info/sparse-checkout; git pull --depth=1 Origin master; cd ..; npm i ./BotBuilder/Node/core/"
  ...
},
...

Das Skript postinstall wird ausgeführt, nachdem das Paket installiert wurde.

Und Schritt für Schritt:

  1. Erstellen Sie einen Ordner für das Reponieren: mkdir BotBuilder
  2. geben Sie den Ordner ein: cd BotBuilder
  3. init git repo: git init
  4. git Origin auf Microsoft/BotBuilder-Repo setzen: git remote add -f Origin https://github.com/Microsoft/BotBuilder.git
  5. sparse checkout aktivieren : git config core.sparseCheckout true
  6. Node/core zur Checkliste hinzufügen: echo "Node/core" >> .git/info/sparse-checkout
  7. teil des Repos ziehen: git pull --depth=1 Origin master
  8. gehen Sie in Ihren App-Ordner: cd ..
  9. botBuilder installieren: npm i ./BotBuilder/Node/core/
20

Könnte etwas außerhalb des Themas sein, nur noch relevant für die Frage

https://git-scm.com/book/de/v2/Git-Toolss-Submodules

Git-Submodule sind Git-Repos, die Sie in anderen Repos verwenden können (im Folgenden als Supermodule bezeichnet). Da jedes Submodul das übliche Sortiment an Verzweigungsmerkmalen und Tags hat, hat jeder Supermodul den Vorteil, dass er versionierbare, steckbare Komponenten ist, die separat bearbeitet oder zusammen mit dem Supermodul entwickelt werden können.

Einige nützliche Befehle

Um ein Submodul hinzuzufügen, führen Sie in Ihrem Supermodul Folgendes aus:

git submodule add <url-to-submodule-repo>

Die Submodule müssen noch initialisiert und vom Repo abgerufen werden:

git submodule init git submodule update

Ein Supermodul mit Submodulen kann geklont und alle Submodule abgerufen werden, indem Sie Folgendes ausführen:

git clone --recursive <url-to-supermodule>

Sie können Upstream-Änderungen in den Zweig eines Submoduls übernehmen, indem Sie Folgendes im Submodulverzeichnis ausführen: 

git fetch

Führen Sie dann Folgendes aus, um den lokalen Code zu aktualisieren:

git merge

Folgendes wird abgerufen und für alle Submodule in Ihrem Supermodul zusammengeführt:

git submodule update --remote

Wenn Sie einen bestimmten Zweig eines Submoduls verfolgen möchten, können Sie Folgendes verwenden:

git config -f .gitmodules submodule.<my-submodule>.branch fantastic_new_implementation

Wenn Sie an Ihren Supermodulen und Submodulen gearbeitet haben und Sie Ihr Supermodul pushen, sind Änderungen an Submodulen nur lokal vorhanden, und diejenigen, mit denen Sie zusammenarbeiten, kennen diese Änderungen nicht. Der folgende Befehl überprüft, ob Ihre Submodule gedrückt wurden, BEVOR Sie versuchen, Ihr Supermodul zu drücken

git Push --recurse-submodules=check

Zum Schluss noch ein nützlicher ForEach -Befehl, mit dem wir für jedes Submodul einen Befehl ausführen können

git submodule foreach 'git checkout -b featureA

2
Thembelani M