Monorepoパッケージ管理ワークフロー

一つのプロジェクトやGitリポジトリには複数の異なるサブプロジェクトやサブモジュールを含むことができ、それらはすべて個別にパッケージ化され公開されます。

親プロジェクトへのパッケージの公開

1つのプロジェクトに公開できるパッケージの数や名前に制限はありません。パッケージごとに異なる設定ファイルを用意することで実現できます。各パッケージマネージャには固有のファイルや、パッケージを公開するための手順があるので、選択したパッケージマネージャのドキュメントを参照してください。

この例ではnpm を使っています。この例では、MyProject が親プロジェクトです。components ディレクトリにサブプロジェクトFoo が含まれています:

MyProject/
  |- src/
  |   |- components/
  |       |- Foo/
  |- package.json

目標はMyProjectFoo のパッケージを公開することです。GitLab NPM レジストリドキュメントの説明に従って、package.json ファイルにpublishConfig セクションを追加し、次のいずれかの方法でMyProject を公開します:

  • npm config set のような CLI コマンドを使って、ローカルの NPM 設定を変更します。
  • これらの設定を指定した.npmrc ファイルをプロジェクトのルートに保存します。

指示に従えば、ルート・ディレクトリからnpm publish を実行してMyProject を発行できます。

発行Foo 方法はほとんど同じ Fooです。ディレクトリにFoo いる間は同じ手順に従って Fooください。Foo には独自のpackage.json ファイルが必要で、npm init を使って手動で追加できます。Foo にも独自の設定設定が必要です。同じ場所にパブリッシュしているので、npm config set を使って親プロジェクトのレジストリを設定した場合は、追加の設定は必要ありません。.npmrc ファイルを使用した場合は .npmrcFoo ディレクトリに.npmrc 追加のファイルが必要 .npmrcです。必ず.gitignore ファイルに.npmrc ファイルを追加するか、アクセストークンの代わりに環境変数を使用して、トークンが公開されないようにしてください。この.npmrc ファイルは、MyProjectで使用したものと同一でかまいません。 これで、Foo ディレクトリから Foo npm publish を実行できるようにFoo なり、 Foo MyProjectとは別にFoo パブリッシュできる Fooようになります。

Conan パッケージも同様の手順で作成できます。ただし、.npmrcpackage.json の代わりに、プロジェクト内の複数の場所にconanfile.py を用意します。

他のプロジェクトへの公開

パッケージは GitLab 上のプロジェクトに関連付けられていますが、パッケージはそのプロジェクトのコードに関連付けられている必要はありません。NPM や Maven を設定するとき、Project ID を使ってパッケージがアップロードされるレジストリ URL を設定するだけです。あなたがアクセスできるプロジェクトにこれを設定し、パッケージの種類に応じて他の設定を同様に更新すると、パッケージはそのプロジェクトに公開されます。つまり、コードが同じ場所に存在しなくても、複数のパッケージをひとつのプロジェクトに公開できます。詳しくはプロジェクトレジストリワークフローを参照ください。