LoginSignup
2
0

More than 1 year has passed since last update.

yarn v1のworkspacesでもコマンドを並列で一括実行したい

Posted at

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にマイグレしてもいいかも・・・

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0