Monorepoパッケージ管理ワークフロー
一つのプロジェクトやGitリポジトリには複数の異なるサブプロジェクトやサブモジュールを含むことができ、それらはすべて個別にパッケージ化され公開されます。
親プロジェクトへのパッケージの公開
1つのプロジェクトに公開できるパッケージの数や名前に制限はありません。パッケージごとに異なる設定ファイルを用意することで実現できます。各パッケージマネージャには固有のファイルや、パッケージを公開するための手順があるので、選択したパッケージマネージャのドキュメントを参照してください。
この例ではnpm を使っています。この例では、MyProject
が親プロジェクトです。components
ディレクトリにサブプロジェクトFoo
が含まれています:
MyProject/
|- src/
| |- components/
| |- Foo/
|- package.json
目標はMyProject
とFoo
のパッケージを公開することです。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
ファイルを使用した場合は .npmrc
、Foo
ディレクトリに.npmrc
追加のファイルが必要 .npmrc
です。必ず.gitignore
ファイルに.npmrc
ファイルを追加するか、アクセストークンの代わりに環境変数を使用して、トークンが公開されないようにしてください。この.npmrc
ファイルは、MyProject
で使用したものと同一でかまいません。 これで、Foo
ディレクトリから Foo
npm publish
を実行できるようにFoo
なり、 Foo
MyProject
とは別にFoo
パブリッシュできる Foo
ようになります。
Conan パッケージも同様の手順で作成できます。ただし、.npmrc
とpackage.json
の代わりに、プロジェクト内の複数の場所にconanfile.py
を用意します。
他のプロジェクトへの公開
パッケージは GitLab 上のプロジェクトに関連付けられていますが、パッケージはそのプロジェクトのコードに関連付けられている必要はありません。NPM や Maven を設定するとき、Project ID
を使ってパッケージがアップロードされるレジストリ URL を設定するだけです。あなたがアクセスできるプロジェクトにこれを設定し、パッケージの種類に応じて他の設定を同様に更新すると、パッケージはそのプロジェクトに公開されます。つまり、コードが同じ場所に存在しなくても、複数のパッケージをひとつのプロジェクトに公開できます。詳しくはプロジェクトレジストリワークフローを参照ください。