web-dev-qa-db-ja.com

github repoサブフォルダーからnpmインストールパッケージ

パッケージがサブフォルダー内にある場合、githubからnpmパッケージをインストールすることはできますか?

たとえば、Microsoft BotBuilderリポジトリがあります。 https://github.com/Microsoft/BotBuilder

ただし、サブフォルダー「Node/core /」内にパッケージをインストールする必要があります。 https://github.com/Microsoft/BotBuilder/tree/master/Node/core/

それでは、どうすればnpmでインストールできますか?

27
Ceridan

追加 package.json

...
"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/"
  ...
},
...

パッケージのインストール後、postinstallスクリプトが実行されています。

そしてステップバイステップ:

  1. リポジトリを複製するフォルダーを作成:mkdir BotBuilder
  2. フォルダーに入力します:cd BotBuilder
  3. init git repo:git init
  4. git OriginをMicrosoft/BotBuilderリポジトリに設定:git remote add -f Origin https://github.com/Microsoft/BotBuilder.git
  5. enable スパースチェックアウトgit config core.sparseCheckout true
  6. 追加 Node/coreチェックアウトリスト:echo "Node/core" >> .git/info/sparse-checkout
  7. リポジトリの一部を取得:git pull --depth=1 Origin master
  8. アプリフォルダーに入力します:cd ..
  9. botBuilderのインストール:npm i ./BotBuilder/Node/core/
24

少し話題から外れているかもしれませんが、質問に関連しているだけです

https://git-scm.com/book/en/v2/Git-Tools-Submodules

Gitサブモジュールは、他のリポジトリで使用できるgitリポジトリです(以降、スーパーモジュールと呼ばれます)。各サブモジュールには通常のブランチ機能とタグの品揃えがあり、各スーパーモジュールはバージョン管理されたプラグ可能なコンポーネントであり、個別に作業したり、スーパーモジュールと一緒に開発したりできます。

いくつかの便利なコマンド

サブモジュールを追加するには、スーパーモジュール内で次を実行します。

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

サブモジュールはまだ初期化して、リポジトリから取得する必要があります。

git submodule init git submodule update

以下を実行することにより、サブモジュールを持つスーパーモジュールを複製し、すべてのサブモジュールを取得できます。

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

サブモジュールディレクトリ内で次を実行することにより、サブモジュールのブランチにアップストリームの変更をプルできます。

git fetch

次に、次を実行してローカルコードを更新します。

git merge

以下は、スーパーモジュール内のすべてのサブモジュールをフェッチしてマージします。

git submodule update --remote

サブモジュールの特定のブランチを追跡する場合は、次を使用できます。

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

スーパーモジュールとサブモジュールで作業していて、スーパーモジュールをプッシュした場合、サブモジュールに加えられた変更はローカルにのみ存在し、協力しているものはこれらの変更を認識しません。次のコマンドは、スーパーモジュールをプッシュする前に、サブモジュールがプッシュされたかどうかを確認します

git Push --recurse-submodules=check

最後に、有用なForEachコマンドがあります。これにより、各サブモジュールに対してコマンドを実行できます

git submodule foreach 'git checkout -b featureA

2
Thembelani M