pnpm link
エイリアス: ln
現在のローカルパッケージをシステム全体、または別の場所にアクセスできるようにします。
pnpm link <dir>
pnpm link --global
pnpm link --global <pkg>
オプション
--dir , -C
- デフォルト:現在の作業ディレクトリ
- タイプ:パス文字列
リンク先を
に変更します。
pnpm link
フォルダーからこのコマンドを実行したパッケージのnode_modules、または--dir
オプションで指定したnode_modulesにパッケージをリンクします。
たとえば、
~/projects/foo
内にいてpnpm link --dir ../bar
を実行すると、foo
がbar/node_modules/foo
にリンクされます。
pnpm link --global
このコマンドを実行した場所、または--dir
オプションで指定した場所のパッケージをグローバルのnode_modules
にリンクし、pnpm link --global
で別のパッケージから参照できるようにします。パッケージにbin
フィールドがある場合、パッケージのバイナリもシステム全体で利用可能になります。
pnpm link --global
グローバルな node_modules
の指定パッケージ (<pkg>
) を、コマンドを実行したパッケージの node_modules
または --dir
オプションで指定したパッケージの node_modules
にリンクする
pnpm link <dir>
と pnpm link --dir <dir>
の違い
pnpm link <dir>
は <dir>
からのパッケージを、コマンドを実行したパッケージの node_modules
にリンクします。pnpm link --dir <dir>
は現在の作業ディレクトリからパッケージを <dir>
にリンクします。
# The current directory is foo
pnpm link ../bar
- foo
- node_modules
- bar -> ../../bar
- bar
# The current directory is bar
pnpm link --dir ../foo
- foo
- node_modules
- bar -> ../../bar
- bar
ユースケース
インストール済のパッケージをローカルバージョンに置き換える
foo
パッケージを使用するプロジェクトがあるとします。foo
に変更を加えて、それらをプロジェクトでテストしたいとします。このシナリオでは、pnpm link
を使用して foo
のローカルバージョンをプロジェクトにリンクできます。その間、package.json
は変更されません。
cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link --global # link foo globally
cd ~/projects/my-project
pnpm link --global foo # link foo to my-project
グローバルな node_modules
フォルダーを使用せずに、ディレクトリから別のディレクトリにパッケージをリンクすることもできます。
cd ~/projects/foo
pnpm install # install dependencies of foo
cd ~/projects/my-project
pnpm link ~/projects/foo # link foo to my-project
バイナリをグローバルに追加する
CLI ツールなどのバイナリがあるパッケージを開発している場合は、pnpm link --global
を使用してバイナリをシステム全体で利用できるようにできます。これは pnpm install -g foo
を使用するのと同じですが、レジストリからダウンロードする代わりに foo
のローカルバージョンを使用します。
バイナリは、パッケージの package.json
に bin
フィールドがある場合にのみ使用できることに注意してください。
cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link --global # link foo globally
pnpm link
と file:
プロトコルを使用することの違い
pnpm link
を使用すると、リンクされたパッケージはソースコードからシンボリックリンクされます。リンクされたパッケージのソースコードを変更できますが、変更はプロジェクトに反映されます。このメソッドでは、pnpm はリンクされたパッケージの依存関係をインストールしません。ソースコードで依存関係を手動でインストールする必要があります。これは、リンクされたパッケージに特定のパッケージマネージャーを使用する必要がある場合、たとえば、リンクされたパッケージに npm
を使用したいがプロジェクトに pnpm を使用したい場合に役立ちます。
dependencies
で file:
プロトコルを使用すると、リンクされたパッケージはプロジェクトの node_modules
にハードリンクされます。リンクされたパッケージのソースコードを変更できますが、変更はプロジェクトに反映されます。このメソッドでは、pnpm はリンクされたパッケージの依存関係もインストールし、リンクされたパッケージの node_modules
を上書きします。
ピア依存関係を扱うときは、file:
プロトコルを使用することをお勧めします。ピア依存関係をプロジェクトの依存関係からより適切に解決し、リンクされた依存関係で確実にメインプロジェクトに指定された依存関係のバージョンが使用されるため、より一貫性のある想定通りの動作が実現します。
機能 | pnpm link | file: プロトコル |
---|---|---|
シンボリックリンク/ハードリンク | シンボリックリンク | ハードリンク |
ソースコード変更を反映する | はい | はい |
リンクされたパッケージの依存関係をインストールする | いいえ (手動インストールが必要) | はい (リンクされたパッケージの node_modules を上書き) |
依存関係に別のパッケージマネージャーを使用する | 可能(例:リンクされた pkg に npm を使用) | いいえ、pnpm を使用します |