LoginSignup
22
8

More than 3 years have passed since last update.

npm linkの使い方

Last updated at Posted at 2021-04-18

概要

自作パッケージを試す際に便利な npm link というコマンドがあることを知りました。公式ドキュメント等を読んでも使い方が分かりにくかったのですが、試してみると簡単でとても便利だったため、その使い方をまとめます。

前提

npm link は例えば次のような状況に使えます。

  • 以下の2つのプロジェクトを開発している
    • UIライブラリ
    • そのUIライブラリをnpmから利用するWebアプリ
  • UIライブラリを修正したあと、webアプリ側で修正内容を確認したい

通常はライブラリを npm publish してアプリ側で新しいバージョンをインストールしなければ確認できませんが、 npm link を使えば、即座にUIの変更をアプリ側に反映することができます。

例として、以下のような構成とします。

  • UIライブラリのディレクトリは /ui-library で、公開しているパッケージ名は @my/ui-library のようにスコープを持つ(package.jsonで指定)
  • Webアプリのディレクトリは /web-app

リンクの作成

参照されるパッケージ側

プロジェクトのディレクトリ /ui-library で下記のコマンドを実行

npm link

これにより、以下のようにシンボリックリンクが作られます。

/Users/<user>/.anyenv/envs/nodenv/versions/14.16.1/lib/node_modules/@my/ui-library
-> /Users/<user>/Desktop/ui-library

リンクはグローバルなパッケージがインストールされる場所(この例の場合はanyenvのnodenv配下)に作られます。

パッケージ使用側

プロジェクトのディレクトリ /web-app で下記のコマンドを実行

npm link @my/ui-library

※ ディレクトリ名ではなくパッケージ名を指定することに注意

これにより、以下のようにシンボリックリンクが作られます。

/Users/<user>/Desktop/web-app/node_modules/@my/ui-library
-> /Users/<user>/.anyenv/envs/nodenv/versions/14.16.1/lib/node_modules/@my/ui-library
-> /Users/<user>/Desktop/ui-library

使用例

Webアプリ側で下記のようにUIをimportしている時、UI側の開発環境での最新のビルド結果が常に反映されるようになります。

import UILibrary from '@my/ui-library'

リンクの解除

パッケージ使用側

新しいバージョンのパッケージを利用したい場合

例えばUI側の修正を npm publish した後、実際に公開されたパッケージを利用してアプリで動作確認したいときは以下のコマンドを実行します。(通常のインストールと同じです)

npm i @my/ui-library@バージョン

すでにインストールされているパッケージに戻したい場合

下記コマンドで、リンクではなく元々のパッケージを利用するように戻ります。

npm i

パッケージをアンインストールしたい場合

通常のパッケージと同じように下記コマンドでリンクを解除することができます。

npm uninstall @my/ui-library

uninstallのエイリアスであるremove, rm, r, un, unlinkのいずれでも大丈夫です。)

参照されるパッケージ側

利用側で解除した上で、グローバルにインストールされたパッケージのリンク自体を消したい場合は下記コマンドを実行します。

npm uninstall -g @my/ui-library

バグ?(2021/04/19追記)

上記方法でリンクを解除した際、パッケージ側のnode_modulesの中身が一部変わってしまうことが確認されました(npm i でインストールしなおせば戻りました)。
また、webpackのexternalの関係なのか、リンクを利用するアプリ側で明らかに通常のimport時と挙動が変わってしまっている部分がありました。

後者は無視できない問題なので、原因を探りたいところです。

参考

npm 公式ドキュメント

22
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
8