ここでの Lerna は Yarn に依存します。事前にyarn
コマンドが使えるようにしておきます。
package.json を編集
package.json
にworkspaces
セクションを追加します。ここに羅列したパスにマッチするディレクトリがそれぞれ実際のプロジェクト(パッケージ)というような意味になります。マッチすると言ったようにここではglob
で指定するようなパスが使えます。
以下は、example
とpackages/**
をワークスペースに登録しています。packages/**
というのはpackages/foo
やpacakges/hoge/fuga
みたいなディレクトリのことです。
あとworkspaces
を設定した時は、private:true
にしないといけないのでこれも設定します。
{
"private": true,
"workspaces": [
"example"
"packages/**",
]
}
Lerna の設定ファイルを作る
Lerna の設定ファイルはlerna.json
としてプロジェクトルートに置きます。以下は Yarn と一緒に使う場合の設定の例です。
{
"version": "independent",
"npmClient": "yarn",
"useWorkspaces": true
}
version
これは各ワークスペースのパッケージのバージョンをどうするかを設定します。例えばここに、1.0.0
と書くとlerna publish
時にワークスペースの公開できるパッケージすべてが1.0.0
で npm などに公開されます。そしてこれは、 Lerna が自動でインクリメントしてくれるので自分で編集する必要はありません。
上記のようにindependent
と書くと各パッケージは独立したバージョンを持つようになります。lerna publish
時、各パッケージは自身に変更があったかを確認し、変更があった場合のに公開の対象になります。バージョンは、その時にパッケージ毎に自分で設定できます。
npmClient
npm
やyarn
など実際に依存したいツールを指定します。
useWorkspaces
npmClient:yarn
の時に、 Yarn の上記で設定したようなworkspaces
をそのまま使うかを設定します。使ったほうが楽なので、ture
でいいと思います。
もし、npm
を使っていたり何かしら自分でワークスペースを設定したい場合はlerna.json
へpackages
というセクションを追加します。この中身はpackage.json
に追加するworkspaces
と同じ形です。
{
"version": "independent",
"packages": [
"example"
"packages/**",
]
}