ここでの 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/**",
]
}