Edited at

Node.jsのプロジェクトローカルなコマンドを叩く

More than 3 years have passed since last update.

最近のフロントエンドはpackage.jsonがあるようなディレクトリの中で作業していることが多い。

そして、npmモジュールをモリモリ使っている。

npmモジュールの中にはターミナルから叩けるコマンドを用意しているものがけっこうある。

グローバルにインストールしてどこからでも叩けるようにしたりもするんだけど、バージョンの問題もあって、プロジェクトローカルで管理したいという時もあったりする。

npm installするとモジュールにコマンドが用意されていた場合/path/to/project/node_modules/.binにシンボリックリンクが張られる。

だけど、毎度パスを指定してコマンドを叩くのはしんどい。

./node_modules/.bin/command

../node_modules/.bin/command
/path/to/project/node_modules/.bin/command

npmはローカルコマンドにアクセスするための便利な機能を提供している。

npm bin

これを叩くと該当するプロジェクトのコマンドへのパスが返ってくる。

なので、

$(npm bin)/command

でパスを解決してコマンドを叩くことができる。

これでも少し面倒な感じがある。

そこでパスを通す方法やらalias設定する方法やら試したが色々問題があった。

最終的に簡単なshellのfunctionで解決することにした。

npmbin(){[ $# -ne 0 ] && $(npm bin)/$*}

の一行を.bashrcやら.zshrcやらに追加すると

npmbin command

でコマンドが叩けるようになる。

設定すら面倒だという人のためにnpmモジュールを作ってみた。

npm i npmbin -g

これで、いつでもどこでもコマンドを叩けるぞ!

npmbin command

ちなみになにも渡さないと、コマンドのパスと一覧を表示するようにしてみた。

npmbin

/path/to/project/node_modules/.bin
command1
command2
command3

以上宣伝でした〜。m(_ _)m