Lerna
2022/4らへんにメンテナンスされない状態になった
別のツールの使用が推奨される
代替
etc.
lint, build, test, release のプロセスを共通化できる
packageをまたがった修正が容易になる
packageをまたがったテストができる
issue 管理を一元化できる
開発環境の構築が簡単になる
コマンド
雑に言うと通常のnpm iのようなコマンドをlerna iにするイメージ
各packageで実行すべきコマンドと、rootで実行すべきコマンド、のような区別はあるか?
package間のimportを行う
1個ずつしかinstallできない
lerna bootstrap
1発目
実行後に生成されるpackageディレクトリにnpm packageを作っていく
2発目以降
管理してるpackage間の依存性を解決する
lerna version
lerna list
lerna changed
lerna diff
全てのpackageのscriptを実行する
e.g. $ npx lerna exec -- npm test
$ lerna run hoge
複数のpackage.jsonのscripts.hogeに書かれてあるコマンドを全て実行する
--parallelをつけると、ログも表示してくれる
--scrope <package名>で、一つのpackageのみのコマンドを実行
lerna init
最初に1回だけ実行する
lernaの初期設定を行う
lerna clean
全てのpackageからnode_modulesを削除する
lerna import
既存の外部のrepositoryをgit historyを保ったままmonorepoに移行する
lerna link
lerna create
個別にpackageを作成する
lerna info
lerna publish
npmに公開する
version:
the current version of the repository.
npmClient:
an option to specify a specific client to run commands with (this can also be specified on a per command basis). Change to "yarn" to run all commands with yarn. Defaults to "npm".
command.publish.ignoreChanges:
an array of globs that won't be included in lerna changed/publish. Use this to prevent publishing a new version unnecessarily for changes, such as fixing a README.md typo.
command.publish.message:
a custom commit message when performing version updates for publication. See @lerna/version for more details.
command.publish.registry:
use it to set a custom registry url to publish to instead of npmjs.org, you must already be authenticated if required.
command.bootstrap.ignore:
an array of globs that won't be bootstrapped when running the lerna bootstrap command.
command.bootstrap.npmClientArgs:
array of strings that will be passed as arguments directly to npm install during the lerna bootstrap command.
command.bootstrap.scope:
an array of globs that restricts which packages will be bootstrapped when running the lerna bootstrap command.
packages:
Array of globs to use as package locations.
monorepoへの移行パターンっていろいろあると思う
一つのrepoを、一つのrepoの中で複数に分離する
複数のrepoを、一つのrepo中で複数で管理する
初期設定の依存関係
以下のようにしたい時
code:B.ts
import A from "a"
code:B/package.json
"dependencies": {
...,
"a": "0.0.0"
}
$ lerna add B --scope Aを実行
2つのmodeがある
Fixed
全てのパッケージが同じバージョン
Independent
パッケージごとに異なるバージョン
個別ディレクトリでnpm install hogehogeはしてはいけないの?
代わりにlerna add hogehogeもしくは、lerna add hoghoge --scope A
削除するときは、package.jsonからソレを消してlerna cleanを実行?
どのタイミングで導入する?
0からAとBを作る時?
既存のAとBがある状態で合体したりできるの?
Gitはどの単位で使うの?
各packageでgit initするの?
コマンドの実行法は?移動してからいつもどおり?
AとBの両方の変更を含めたcommitとかするものなの?
管理しづらくなったりしない?
途中からmonorepoに移行できる?
1つのプロジェクト内でのモジュール群を、monorepoとして分離させたい
たぶん逆に複数のプロジェクトをmonorepoに移行する方が普通
調べたらそういう動機のものが多いgi
できれば各ファイルのcommit historyを保ったまま分離させたい
1つのプロジェクトはblitzのようなでかいフレームワーク
ここから1つのライブラリを切り出したい
packages間で重複するnpmライブラリを一括で管理できるのってそんな嬉しいか?
個別でやったほうがいい気がするが
動機
1つのProject内で、モジュールを疎結合にしたいが、
一々npmパッケージとしたらしたで、修正と適用が面倒になる
publishとupdateをしないといけないので
なので、1つのRepository内で、別物として複数のRepository管理できるのは嬉しい
いずれ別のRepositoryに分けるにしても便利
VSCodeを見やすくする
Lernaを使っているRepository
etc.