ローカルにある別の npm パッケージを参照する

npm レジストリに Publish されていない、ローカルにのみ存在する npm パッケージを、別のプロジェクトで参照利用する方法を調べた。

以前は npm link を使う手法があったが、それよりももう少し簡単にやる方法があった。

package.jsondependencies ないしは devDependencies にて、file:../my-local-package という風に、使いたいパッケージがあるディレクトリへの相対パスが書ける。

{
  "name": "my-app",
  ... (中略) ...
  "dependencies": {
    "my-local-package": "file:../my-local-package"
  },
  ... (中略) ...
}

そして $ npm install すると、./node_modules/my-local-package/シンボリックリンクになってくれる。

あとは通常どおりアプリ内で require なり import なりして使えば OK。

// 「利用アプリ」内のコード
import helloWorld from 'my-local-pkg';
console.log(helloWorld('Yo'));

dependencies 内の Key 部分が、require() で書く Key 文字列と一致すれば良い。対象のパッケージ側の package.json に記載した name とは一致していなくても良いようだ。混乱するので名前は合わせておくに越したことはないが…。

また、シンボリックリンクで扱われるので、対象のパッケージ側の資材をリビルドしたりすれば、利用側では npm install をやり直すことなく、変更が反映されて楽チン。

プライベート npm レジストリを使えない環境で、Publish はしたくないけどパッケージは分割したい、という時に使えそう。