mcpField
L
link-workspace-packages

link-workspace-packages

github.com/nrwl開発293.1k 回インストール今日更新
リポジトリ

link-workspace-packages について

monorepo 内のパッケージ間に依存関係を追加するためのガイドです。パッケージマネージャーを判別し、pnpm、yarn、npm、bun の workspace コマンドを紹介します。

主な機能

  1. 01パッケージマネージャーの判別
  2. 02workspace 依存関係の追加
  3. 03マネージャー別コマンドの使用
  4. 04パッケージのシンボリックリンク確認
  5. 05モジュール不足の問題解決

活用シーン

  1. 01UI パッケージをアプリにリンク
  2. 02複数のローカル依存関係の追加
  3. 03モジュールが見つからないエラーの解決

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nrwl/nx-ai-agents-config --skill link-workspace-packages

インストール後、Claude Code で/link-workspace-packagesを入力して読み込まれたか確認します。

詳細

ワークスペースパッケージのリンク

モノレポ内のパッケージ間に依存関係を追加します。すべてのパッケージマネージャーはワークスペースをサポートしていますが、構文は異なります。

パッケージマネージャーの検出

ルートレベルの package.json に packageManager フィールドがあるか確認します。

あるいは、リポジトリルートのロックファイルを確認します:

  • pnpm-lock.yaml → pnpm
  • yarn.lock → yarn
  • bun.lock / bun.lockb → bun
  • package-lock.json → npm

ワークフロー

  1. コンシューマーパッケージ(インポートする側)を特定します
  2. プロバイダーパッケージ(インポートされる側)を特定します
  3. パッケージマネージャーのワークスペース構文を使用して依存関係を追加します
  4. コンシューマーの node_modules/ にシンボリックリンクが作成されたことを確認します

pnpm

workspace: プロトコルを使用します - シンボリックリンクは明示的に宣言された場合にのみ作成されます。

# From consumer directory
pnpm add @org/ui --workspace

# Or with --filter from anywhere
pnpm add @org/ui --filter @org/app --workspace

package.json での結果:

{ "dependencies": { "@org/ui": "workspace:*" } }

yarn (v2+/berry)

こちらも workspace: プロトコルを使用します。

yarn workspace @org/app add @org/ui

package.json での結果:

{ "dependencies": { "@org/ui": "workspace:^" } }

npm

workspace: プロトコルはありません。npm はワークスペースパッケージを自動的にシンボリックリンクします。

npm install @org/ui --workspace @org/app

package.json での結果:

{ "dependencies": { "@org/ui": "*" } }

npm はインストール時に自動的にローカルワークスペースに解決します。


bun

workspace: プロトコルをサポートします(pnpm 互換)。

cd packages/app && bun add @org/ui

package.json での結果:

{ "dependencies": { "@org/ui": "workspace:*" } }

例

例 1: pnpm - ui ライブラリを app にリンクする

pnpm add @org/ui --filter @org/app --workspace

例 2: npm - 複数のパッケージをリンクする

npm install @org/data-access @org/ui --workspace @org/dashboard

例 3: 「Cannot find module」のデバッグ

  1. 依存関係がコンシューマーの package.json で宣言されているか確認します
  2. 宣言されていない場合は、上記の適切なコマンドを使用して追加します
  3. インストールを実行します(pnpm install、npm install など)

注意事項

  • シンボリックリンクは <consumer>/node_modules/@org/<package> に作成されます
  • ホイスティングはマネージャーによって異なります:
    • npm/bun: 共有の依存関係をルートの node_modules にホイストします
    • pnpm: ホイスティングなし(厳密な分離により、ファントム依存を防ぎます)
    • yarn berry: デフォルトで Plug'n'Play を使用します(node_modules はありません)
  • ルートの package.json には、誤った公開を防ぐために "private": true を設定する必要があります

コメント