Ledger Live Monorepo プロジェクト: パート 2 - ツール (Make it Shine) | 元帳

Ledger Live Monorepo プロジェクト: パート 2 – ツール (Make it Shine) | 元帳

ソースノード: 2985172

ブログ投稿シリーズ「Ledger Live Monorepo Project」の XNUMX 番目のエントリ。Ledger 開発者が、Ledger Live コードベースの Mono リポジトリへの大規模な移行のストーリーを語ります。 パート 1 を見逃した場合は、ここでチェックしてください。

モノリポジトリ アーキテクチャが実行可能なソリューションであることを確立した後、計画を実行するために利用可能なツールの調査を開始しました。

複数のプロジェクトを扱う

Ledger Live チームでは、JavaScript エコシステム内をナビゲートしますが、幸いなことに、パッケージ マネージャーを使用して複数のプロジェクトを処理するいくつかの方法をすでに知っていました。 考えられる解決策には次のようなものがあります。

  • NPM (ワークスペースをサポートしていますが、より良い代替手段があります)、
  • 糸1 (古くなりすぎ、より優れた、より効率的な代替手段が登場)、
  • 糸 ≥ 2 (興味深いアイデアですが、プラグ アンド プレイはどこでも、特に React Native では十分にサポートされていません)、
  • PNPM (ワークスペースを念頭に置いて構築されたシンボリックリンク、ディスク効率)。

これらすべてを検討した結果、私たちはこれに行くことにしました PNPM ために:

  • ディスク効率 (仮想ディスクを使用します) 店舗 および シンボリックリンク、したがって、パッケージは一度だけダウンロードされ、その後仮想ストアからnode_modulesにシンボリックリンクされます)、
  • 速度 (パッケージがキャッシュされるため、その後のインストールははるかに高速になります)、
  • ワークスペース/モノリポジトリ アーキテクチャ (エイリアス、オーケストレーションなど) のサポートが組み込まれています。

紙の上に PNPM これは絶対的な逸品ですが、シンボリックリンクを正しく設定するには少し奇妙でした (これも特に React Native の場合)。

OK、それで私たちの選択は決まりました。 PNPM。

スクリプトオーケストレーション

にもかかわらず、 PNPM 機能にはオーケストレーションがどんどん追加されていますが、私たちがやりたかったことをすべてカバーしているわけではありません。

  • 順次ビルド、
  • キャッシング。

これらに関して、検討する必要がある XNUMX つの興味深い候補者が見つかりました。

  • NX (角度チームによる)、
  • ターボレポ (私たちが作業を開始したときに v1.0.0 を発表したばかりで、現在は Vercel チームと協力しています)。

私たちは両方について概念実証を行いました。

NX には、はるかに多くの機能、ジェネレーター、自動化、優れた依存関係グラフなどが含まれていました…しかし、多くのオーバーヘッドが追加され、かなり意見が分かれているため、規約に従う必要がありました。

ターボレポ 一方、機能的には非常に基本的なものです。 それでも、これは便利なプラグ アンド プレイ ソリューションであり、必要に応じてすぐに変更できます。

にもかかわらず、 ターボレポ より少ない機能しかありませんでした NX、私たちが探していた2つのことを実現しました。

  • 依存関係ツリー (および同時ビルド) を考慮したビルドのオーケストレーション。
  • キャッシュ (コードが変更されていない場合、ビルドはキャッシュされ、「再生」されます)。

それに加えて、ドロップイン/ドロップアウトが簡単だったので、私たちはすぐに新しい子を選ぶことになりました。 ターボリポ.

バージョン管理

いくつかの解決策も検討しましたが、最終的には次の方法を使用することにしました。 https://github.com/changesets/changesets これは TurboRepo が推奨するツールの XNUMX つであり、ドキュメントを少し読んだ結果、私たちのニーズを満たしているようでした。

開発者は、開発フローをもう少し厳密にして、次のようなサービスを提供する必要があります。 changesets (コードがどのライブラリを変更するかを説明するファイル、重大度は次のとおりです) センバー 規約と変更の説明)。 これら changesets その後、指定された重大度に従ってパッケージのバージョンを自動的に上げたり、 チェンジログ。 さらに、このツールでは次のことが可能になります。 pre release モード、🍰の🍒。

次は何ですか ?

道具を決めたら、いよいよ作業開始です。 次のブログ記事では、モノラル リポジトリのコンテキストでのビルド システムとすべての開発運用/自動化/継続的インテグレーションについて説明します。


バレンティン・デ・アルメイダ
開発者エクスペリエンスとコア技術 – Ledger Live

タイムスタンプ:

より多くの 元帳