BunのWorkspaces
bun v1.2.4を使っているが挙動が怪しいmrsekut.icon
rootでbun installをしたときに、各package内で入るライブラリがおかしい
GPT-4.icon
ディレクトリ構成の例
code:_
.
├── package.json // リポジトリのroot
├── node_modules // 共有されるnode_modules
└── packages/
├── stuff-a/
│ └── package.json
└── stuff-b/
└── package.json
ルートにpackage.jsonがあり、
packages/ディレクトリの中に個別のパッケージ(ここではstuff-a、stuff-b)がある。
ルートの package.json の設定
ルートのpackage.jsonはこんな感じにする:
code:json
{
"name": "my-monorepo",
"private": true,
"workspaces": [
"packages/*"
]
}
ポイント:
"private": true を付ける
→ npm publishされないように(誤って公開しないため)
"workspaces" にパッケージの場所を書く
→ ここでは packages/*(globパターンでサブディレクトリ全部対象)
ルートではdependenciesやdevDependenciesは基本的に書かない。
個々のパッケージが自分で依存関係を持つ。
ワークスペース間の依存関係を張る
例えば、stuff-bがstuff-aに依存したい場合、
stuff-b/package.jsonにこう書く:
code:json
{
"name": "stuff-b",
"dependencies": {
"stuff-a": "workspace:*"
}
}
"workspace:*" を使うと、「このMonorepo内の別パッケージを指す」って意味になる。
インストールの仕方
プロジェクトルート(=最上階のディレクトリ)で:
code:bash
bun install
これだけで、全パッケージ分まとめてインストールできる!
依存解決もワークスペース間でうまくやってくれる。
追加のライブラリインストール
特定のパッケージ(例:stuff-a)に新しいnpmライブラリを追加したいときは:
code:bash
cd packages/stuff-a
bun add zod