29
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-13

「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に指定するほうが無難だと思います。

参考にした記事

29
17
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
29
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?