【Node.js】lernaでMonorepoな環境を構築する
Node.jsでlernaを使ってMonorepoな環境を構築したい!
概要
今回の記事では、Node.jsでlernaを使ってMonorepoな環境を構築する手順を掲載する。
Monorepoとは、複数のプロジェクトを単一のリポジトリで管理する方法。共通の処理があったり、複数のアプリを合わせて、1つのサービスとするような感じのプロジェクト郡の管理に
仕様書
環境
- Node.js 20.15.0
- npm 10.8.1
- yarn 1.22.22
- lerna 8.1.8
手順書
npm
でもyarn
でもパッケージ管理できる。yarn
を使いたい場合はインストールしておく。
npm install -g yarn
lerna
のプロジェクトを作るディレクトリーの中でlerna
をインストールする。
npm install -d lerna
lerna
でプロジェクトを初期化する。
npx lerna init
workspace
がプロジェクトだとして下記のような感じでディレクトリーとファイルが作られる。
workspace
node_module
.gitgnore
lerna.json
package-lock.json
package.json
lerna.json
の中身を確認する。
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "0.0.0",
"packages": [
"packages/*"
]
}
パッケージの管理をyarn
で行いたい場合は"npmClient": "yarn"
を追加する。
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "0.0.0",
"packages": [
"packages/*"
],
"npmClient": "yarn"
}
packages
のpackages/*
がlerna
で管理するプロジェクトの保管場所になるのでディレクトリーpackages
を作って、この中にプロジェクトを作ったり、移動したりする。
管理してるプロジェクト同士の依存関係の簡単な設定の例。
workspace
packages
main_app
admin_app
...
main_app
とadmin_app
があって、admin_app
がmain_app
に依存してるとする場合、はadmin_app
のpackage.json
のdependencies
の中に"main_app": "^1.0.0"
を追加する。
{
"name": "admin_app",
"version": "1.0.0",
"private": true,
...
"dependencies": {
...
"main_app": "^1.0.0"
},
...
}
tsconfig.json
のbaseUrl
をいじってる場合は、paths
も編集した方が良さげ。
{
"compilerOptions": {
...
"baseUrl": "./src",
"paths": {
"main_app/*": ["../../main_app/src/*"]
}
},
}
編集が終わったら、ディレクトリーworkspace
に移動してyarn install
またはnpm install
を実行するとプロジェクト間の依存関係に従って処理される。
yarn install
共通のパッケージのインストールもディレクトリーworkspace
でyarn
やnpm
を実行する。
まとめ(感想文)
メインのアプリがあって、管理アプリなどを別のプロジェクトで作る場合や共通のコードがある場合に使えるかもね!