Help us understand the problem. What is going on with this article?

特定のモジュールと強く依存するプロジェクトの開発を行うときのtips(「npm link」と「dependenciesにローカルフォルダを指定する」方法の比較 )

More than 3 years have passed since last update.

「npmに公開していないローカルフォルダにあるモジュール」を使ったプロジェクトを開発する際にnpm linkを使う方法とdependenciesを使ってモジュールをローカルに指定する方法があるので2つを比較してみました。

1. 「npm linkを使う」方法

概要

  • node_modules以下にモジュールへのエイリアス(ショートカット)を貼ります。

メリット

  • エイリアスを貼るだけなので、モジュールの更新との同期がすぐできる。
  • モジュール側をどこのフォルダに配置しても問題ない。

デメリット

  • 初回のみだが、開発中のメンバー全員に、インストール手順を知らせなければならない。(※ もしかしたらnpm scriptsのinstallにコマンド書けばいいかも・・・?)

使用手順

1. モジュール側のプロジェクト(package.json)があるフォルダで、以下のコマンドを実行します。

$ npm link

2. モジュールを使用するプロジェクトが(package.json)あるフォルダで以下のコマンドを実行します。

$ npm link (モジュールのpackage名)

npm-use-link.png

▲ mylibはエイリアス

2. 「dependenciesにローカルフォルダを指定する」方法

概要

  • node_modules以下にモジュールを直接インストールします。

メリット

  • npm installだけでモジュールをインストールできる。

デメリット

  • モジュールの更新時に再度npm installが必要

使用手順

1. モジュールを使用するプロジェクトの「package.json」ファイルを編集し、dependenciesにモジュールへのパスを指定します(file:でローカルにあるファイルを指定できます)。

package.json
{
  "name": "app-use-dependencies",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "nyamogera <nyamogera@gmail.com> (nyamogera.net)",
  "license": "MIT",
  "dependencies":{
    "mylib":"file:../mylib"
  }
}

2. 上記編集後、npm installコマンドを実行します。

$ npm install 

npm-dependencies.png

▲ mylibは通常のパッケージと同様にインストールされる。

まとめ

どちらを使うかは、モジュールの更新頻度や大きさによって変わると思います。モジュールが未成熟で頻繁に更新がかかっていたり、モジュールが大きくnpm installにコストがかかるのであればnpm linkを使うと良いでしょう。モジュールすでに成熟してて更新がそこまでかからなかったり、モジュールが小さくnpm installにコストが少ないのであれば、dependenciesに指定するほうが無難だと思います。

参考にした記事

nyamogera
フロントエンド周りをお仕事にしてます。ハムスターのことを一日考えて過ごすことが多いです。
http://nyamogera.net
ics
インタラクションデザイン専門のプロダクション。最先端のウェブテクノロジーを駆使し、オンスクリーンメディアの表現分野で活動しています。最新のウェブ技術を発信するサイト「ICS MEDIA」を運営。
https://ics.media/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away