link-workspace-packages について
monorepo 内のパッケージ間に依存関係を追加するためのガイドです。パッケージマネージャーを判別し、pnpm、yarn、npm、bun の workspace コマンドを紹介します。
主な機能
- 01パッケージマネージャーの判別
- 02workspace 依存関係の追加
- 03マネージャー別コマンドの使用
- 04パッケージのシンボリックリンク確認
- 05モジュール不足の問題解決
活用シーン
- 01UI パッケージをアプリにリンク
- 02複数のローカル依存関係の追加
- 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→ pnpmyarn.lock→ yarnbun.lock/bun.lockb→ bunpackage-lock.json→ npm
ワークフロー
- コンシューマーパッケージ(インポートする側)を特定します
- プロバイダーパッケージ(インポートされる側)を特定します
- パッケージマネージャーのワークスペース構文を使用して依存関係を追加します
- コンシューマーの
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」のデバッグ
- 依存関係がコンシューマーの
package.jsonで宣言されているか確認します - 宣言されていない場合は、上記の適切なコマンドを使用して追加します
- インストールを実行します(
pnpm install、npm installなど)
注意事項
- シンボリックリンクは
<consumer>/node_modules/@org/<package>に作成されます - ホイスティングはマネージャーによって異なります:
- npm/bun: 共有の依存関係をルートの
node_modulesにホイストします - pnpm: ホイスティングなし(厳密な分離により、ファントム依存を防ぎます)
- yarn berry: デフォルトで Plug'n'Play を使用します(
node_modulesはありません)
- npm/bun: 共有の依存関係をルートの
- ルートの
package.jsonには、誤った公開を防ぐために"private": trueを設定する必要があります
コメント
Markdown 対応