2つのモジュール(A, B)を並行で開発しており、 A と B に依存関係がある場合に(A は B から読み込まれる)、 B/node_modules 以下に Aがインストールされているように振る舞う方法があると、 開発がスムーズになります。
そのためのコマンドが npm link です。
まずは、A のディレクトリに移動し npm link
を実行します。
cat package.json | jq '{name}' # モジュール名を確認(この例では"A")
> { "name": "A" }
npm link
> /usr/local/lib/node_modules/A -> ~/workspace/A
これにより ~/workspace/A
と /usr/local/lib/node_modules
がリンクします。
npm i -g A
に近い状態になります
次に、B のディレクトリに移動し npm link A
を実行します。
npm link A
> ~/workspace/B/node_modules/A -> /usr/local/lib/node_modules/A
これで ~/workspace/A
のリンクが ~/workspace/B
に貼られます。
この後は npm i A
した後と同じように扱う事ができるため、モジュールAとBを並行で開発できます。
A/package.json に { "bin": "./cli.js" }
と記述すると、
~/workspace/A/cli.js
と ~/workspace/B/node_modules/.bin/cli.js
がリンクします。
便利ですね。