Javaではmavenのマルチプロジェクトを検討したことがあるが、JavaScriptではmonorepoというのを知らなかったので、ざっくり調べてみた
wikipediaによると最近?(2017年?)になって命名されたとのこと
Monorepo - Wikipediamonorepoの長所と短所はこちらがよく紹介されている
babel/monorepo.md at master · babel/babel · GitHub
当然といえば当然だけど、Mavenマルチプロジェクトのメリデメとほとんど一緒だったlerna
とyarn
を使うといい感じにmonorepoが作れるみたい
lernaでのmonorepoにおけるリリースフロー(Fixed/Independent) | Web Scratch
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つくることになったら触ってみようと思う