UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【構成管理】ざっくりmonorepoについて

Javaではmavenのマルチプロジェクトを検討したことがあるが、JavaScriptではmonorepoというのを知らなかったので、ざっくり調べてみた

uga-box.hatenablog.com

yarnでmonorepoをつくってみる

公式ドキュメント ワークスペース | Yarn

ルートのディレクトリに以下が記述されたpackage.jsonを配置する

{
  "private": true,
  "workspaces": ["workspace-a", "workspace-b"]
}

次に、workspace-aディレクトリを作成し、そのディレクトリないで以下が記述されたpackage.jsonを配置する

{
  "name": "workspace-a",
  "version": "1.0.0",

  "dependencies": {
    "cross-env": "5.0.5"
  }
}

そして、workspace-bディレクトリには、以下が記述されたpackage.jsonを配置する

{
  "name": "workspace-b",
  "version": "1.0.0",

  "dependencies": {
    "cross-env": "5.0.5",
    "workspace-a": "1.0.0"
  }
}

最後にルートのディレクトリにいき、yarn installを実行すると以下のようなディレクトリ構成になる

.
├── node_modules
│   ├── cross-env
│   ├── workspace-a
│   │   ├── index.js
│   │   └── package.json
│   └── workspace-b -> ../workspace-b
├── package.json
├── workspace-b
│   ├── node_modules
│   └── package.json
└── yarn.lock

workspace-aとworkspace-bで共通するcross-env パッケージがルートディレクトリ直下のnode_modulesに置かれていたりして、いい感じにやってくれているのが確認できた

まとめ

ざっくり理解できた
lernaはmonorepoつくることになったら触ってみようと思う

他参考

https://trunkbaseddevelopment.com/monorepos/

https://qiita.com/macoshita/items/0c7bfc162e4a6db26219