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
シンボリックリンクなので、当然修正した分はすぐ反映されますね。
開発中のモジュールをローカルでインテグレーションテストをしたい時に便利そうです。
参考文献
- ドキュメント
npm linkが意外と便利だった
- http://www.tejitak.com/blog/?p=1535