mikexxz
記事一覧

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 できてしまい、ローカルでは問題なく動いていても、デプロイしてから依存関係の書き漏れに気づくことになります。

コメント

このコメントを削除しますか?

コメントの内容は消去され、元に戻すことはできません。