pnpm、Bun、npm:monorepo のパッケージマネージャーをどう選ぶか

この記事は中国語の原文を機械翻訳したものです。原文を読む
このプロジェクトは monorepo で、フロントエンド、API、共有の schema パッケージをひとつにまとめています。当初は pnpm workspace を使う予定でしたが、最終的に Bun に切り替えました。
パッケージマネージャー ≠ ランタイム
Bun は、パッケージマネージャー、スクリプトランナー、JavaScript ランタイムという 3 つの役割を兼ねています。これらは別々に選ぶことができます。
- パッケージマネージャー:Bun を使います。インストールが速く、workspaces をネイティブでサポートしており、lockfile はテキスト形式です
- ランタイム:引き続き Node を使います。Next.js は Node を主なターゲットにしているため、問題が起きたときにどちらの責任なのか判断しやすくなります
bun run dev で実行されるスクリプトの中で呼び出されているのは next で、next の shebang は #!/usr/bin/env node です。そのため、実際には Node 上で動いています。
分離インストール
pnpm には非常に重要な特性があります。各パッケージは、自分で宣言した依存関係しか import できないというものです。Bun の isolated linker でも同じ保証が得られます。
[install]
linker = "isolated"
この制限がないと、A パッケージがたまたま B パッケージの依存関係を import できてしまい、ローカルでは問題なく動いていても、デプロイしてから依存関係の書き漏れに気づくことになります。
コメント