lernaの概要を理解する
以下のlernaの公式ページを読んでいこうと思います。
lernaとは
- 複数パッケージで構成されるJavaScriptプロジェクトを管理するためのツール
- gitとnpmを使用したマルチパッケージリポジトリの管理に関するワークフローを最適化するツール
背景
問題認識
解決策
Vuetifyもlerna使ってるよね。Vueは使ってなさそう。この領域のデファクトなのかな。
具体例を確認するには、JestとVuetifyのリポジトリを参考にしてみようかな。
jest jestもfacebookのプロダクトだったのか。 github.com
vuetify github.com
Monorepo(モノレポ)
公式ページには特に記載なかったが、一つのリポジトリで複数パッケージを管理することをモノレポと呼ぶらしい。
Getting Started
# 私の環境ではsudoつけないとエラーになった $ sudo npm install -g lerna $ git init lerna-repo && cd lerna-repo hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch <name> hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m <name> Initialized empty Git repository in /home/xxxx/git/lerna-repo/.git/ $ lerna init lerna notice cli v4.0.0 lerna info Creating package.json lerna info Creating lerna.json lerna info Creating packages directory lerna success Initialized Lerna files $ tree . . ├── lerna.json ├── package.json └── packages // ここに、複数のパッケージが配置されるのかな 1 directory, 2 files
vuetify/packages at master · vuetifyjs/vuetify · GitHub
Vuetifyだとpackage以下に以下3つのディレクトリがあるので、この3つが個別のパッケージということか。
- api-generator
- docs
- vuetify
確かに、上記ディレクトリそれぞれにpackage.json
が存在するみたいだ。
コマンド
簡単なコマンド紹介。詳細は以下のREADME参照
ここに列挙されているのが、よく使われるコマンドってことかな。
lerna init
新しいlernaのレポジトリの作成。既存レポジトリを現在バージョンのlernaへアップグレード
lerna bootstrap
現在のLernaリポジトリでパッケージをブートストラップします。すべての依存関係をインストールし、相互依存関係をリンクします。
これ、複数あるパッケージ間の相互依存関係の話かな。あとで実験してみよう。
lerna import
ローカルパスのパッケージを/packages/<directory-name>にコミット履歴と一緒にインポートする。
これは、既存パッケージからlerna構成に移行するときに使うもんぽいな。
lerna publish
パッケージの新しいリリースを作成する。
npmにもpublishがある。lernaは複数のパッケージをまとめて管理なので、まとめてpublishすることができる、ということだろう。
qiita.com 自分でも簡単なライブラリをpublishしてみたいな。
lerna changed
最新のリリースからどのパッケージが変更されているかチェックする
lerna diff [package?]
最新のリリースからのdiff。全てのパッケージ or 一つのパッケージ
lerna run [script]
引数のscriptが含まれるそれぞれのpackageのnpm scriptの実行。
これ、例えば、それぞれのパッケージでbuildというscriptを提供してたら、lerna run build でそれぞれのパッケージのbuildを実行してくれるってことかな。
lerna ls
カレントlernaレポの全てのpublicパッケージのリストを表示
終わりに
lernaでできることがなんとなく理解できたな。とくにどんなコマンドがあるのかをさらっと理解するだけでも、何してくれるツールなのか理解が深まったと感じた。
vuetifyのソースを見るとlernaがあって、なんだこれと思って軽くみてみたけど、そもそもnpmを理解した方がよいと思ったので、次はnpmで自作ライブラリをpublishすることを試してみたい。
備忘
- そもそもpackage.jsonやnpmのパッケージの作り方を学んだ方が良いきがした。
- lernaはそれの発展系というか複数一括にできるようにするよ、というツールだから
- lerna bootstrapがどう動くかは後で実験したい。