yarn workspacesを使ってると、配下のパッケージにあるスクリプトを一括実行したい事がよくあります。
yarn v2からはworkspeces foreachが使えるのですが、移行する暇がないので暫定的に以下のようにして一括でやっちゃいます。
前提:フォルダ構成
以下のようにapp-a~cをmonorepoで管理してる前提で進めていきます。
project/
├── package.json
└── packages
├── app-a
│ └── package.json
├── app-b
│ └── package.json
└── app-c
└── package.json
各パッケージ内のpackage.json
それぞれ"build", "start"コマンドが設定されている想定です。
app-a~c配下のpackage.json
{
"scripts": {
"build": "tsc",
"start": "tsc --watch"
}
}
ルートのpackage.json
直列実行で問題無い場合は下記の"build"コマンドのように&&で区切って配下のパッケージのスクリプトを実行できます。
問題は並列実行をしたい場合ですが、ルート上にnpmパッケージをインストールすることは出来ないので、下記の"start"コマンドのように npm-run-all をnpxで毎回呼び出して実行することで一応できます。
ルートのpackage.json
{
"workspaces": [
"packages/*"
],
"scripts": {
"build" : "yarn workspace app-a build && yarn workspace app-b build && yarn workspace app-c build",
"start" : "npx npm-run-all -p start:*",
"start:a" : "yarn workspace app-a start",
"start:b" : "yarn workspace app-b start",
"start:c" : "yarn workspace app-c start"
}
}
他の解決策としては、試してないですけどlernaを入れてlerna run
でしょうか?
そこまでするならyarn v2にマイグレしてもいいかも・・・