Lerna対Nx:CIにはどちらのJS monorepoツールか?
LernaはJS monorepoのバージョニングと公開を切り開きました。Nxは強力なキャッシングとタスクオーケストレーションを加えます(そして今ではLernaを保守しています)。
Lernaは、パッケージのバージョニングと公開で知られる古典的なJavaScript monorepoツールです。Nxは、計算のキャッシング、影響検出、ジェネレータを備えた、より広範なmonorepoプラットフォームです。注目すべきは、Nrwl(Nxのチーム)がLernaの保守を引き継ぎ、モダンなLernaが内部でNxのタスクランナーを使えることです。
| Lerna | Nx | |
|---|---|---|
| 中核となる強み | バージョニング + 公開 | キャッシング + タスクオーケストレーション |
| タスクのキャッシング | Nx統合経由 | ネイティブ(local + remote) |
| 影響検出 | 限定的(今はNx駆動) | ネイティブのプロジェクトグラフ |
| ジェネレータ / プラグイン | なし | 広範 |
| 関係 | Nxチームが保守 | 該当なし |
CIにおいて
CIでの純粋な速度 - タスク出力をcacheし、影響を受けたプロジェクトだけを実行し、リモートcacheを共有する - では、Nxがより強力なエンジンであり、モダンなLernaはその恩恵を得るためにタスク実行をNxに委任できます。Lernaの不変の価値は、マルチパッケージリポジトリのためのバージョニングと公開のワークフローです。多くのチームはbuild/testのグラフにNxを使い、協調的なバージョン更新とnpm公開のためにLernaを特に残しています。
pipelineのための選択
キャッシングとジェネレータを備えた、影響を受けたものだけの高速なbuildを望むなら:Nx。洗練されたマルチパッケージのバージョニングと公開が必要なら:Lerna(今はタスクにNxを使います)。共有された保守とNxに支えられたタスク実行を考えると、厳密にどちらか一方ではありません。
結論
最も強力なキャッシングとタスクオーケストレーションを望むなら:Nx。多数のパッケージに対する成熟したバージョニング/公開が必要なら:Lerna(Nx経由でタスクを実行できます)。両者は今や重なり合っています - buildにはNx、リリースにはLernaを、両方必要なら使いましょう。