日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

npm linkというコマンドを知った。

nodeのなんらかのモジュールを作ろうとしていて、実際に他のライブラリから呼んで動くかどうか確認したい時ありませんか。
私は毎度package.json"hoge" : "https://github.com/foo/bar.git" みたいな書き方できるので、github上に置いてnpm installしてました。
そしたら、知人が npm link というものがあると教えてくれたのでその備忘録です。

使い方

開発中のモジュールのディレクトリに移動して、 npm link をします。
そうするとglobalなnode_modulesディレクトリにシンボリックリンクがはられます。
そして、そのパッケージを使いたいモジュールのディレクトリに移動して npm link {package name} を実行すると
そのディレクトリにnode_modulesが生成されて、シンボリックリンクがまたはられます。
実際にやってみました。

# 適当なnpm moduleを作成
$npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (hoge)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /path/to/repo/hoge/package.json:

{
  "name": "hoge",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

# globalなnode_modulesにシンボリックリンクを貼る
$npm link
npm WARN EPACKAGEJSON hoge@1.0.0 No description
npm WARN EPACKAGEJSON hoge@1.0.0 No repository field.
/usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge -> /path/to/repo/hoge

# ↑で作ったmoduleを使うための設定
# 適当なnpm moduleをもう一つ作成
$npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (fuga)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /path/to/repo/fuga/package.json:

{
  "name": "fuga",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

# このmoduleでhoge moduleを使う設定
$npm link hoge
/path/to/repo/fuga/node_modules/hoge -> /usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge -> /path/to/repo/hoge

# globalなnode_modulesにシンボリックリンクがはられていました。
$ll node_modules/
total 8
lrwxr-xr-x  1 arata  staff    57B  1 17 00:59 hoge -> /usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge

シンボリックリンクなので、当然修正した分はすぐ反映されますね。
開発中のモジュールをローカルでインテグレーションテストをしたい時に便利そうです。

参考文献