通常、 npm で実行コマンドをインストールするときは、以下のようにグローバルオプションを つけてインストールすることが多いと思う。

$ npm install -g gulp

だけど、これではプロジェクトごとに違うバージョンを使いたい!などの場合にこまる。 そこで direnv

これを使うとあるディレクトリでは、「〜〜する」というのが簡単に出来る。

導入方法

まず、 direnv はgoを使うので、goをインストールしておく。

$ brew install go --cross-compile-common

以下を .zshenv に記載。

# direnv
if which go > /dev/null; then
    if [ ! -d $HOME/.direnv ]; then
        git clone https://github.com/zimbatm/direnv ~/.direnv
        pushd ~/.direnv
        make install
        popd
    fi
    eval "$(direnv hook zsh)"
fi

あとはシェルを再起動したらインストール完了。

使い方

プロジェクトのディレクトリでローカルにnpmのコマンドをインストールする。

$ npm install gulp

ローカルにインストールした場合、通常以下の場所に実行コマンドが配置される。

$ ls node_modules/.bin
bower  cake  coffee  gulp  nodemon  nodewebkit  wiredep

なので、この場所をPATHに追加すればよい。 direnv では、以下のようにする。

$ direnv edit .

これで、エディタで .envrc というファイルが開くので、以下の行を記載。

export PATH=$PWD/node_modules/.bin:$PATH

これでOK。こうすると、このディレクトリに来た場合は自動的にPATHに追加され、 反対にディレクトリから出た場合、自動的にPATHから削除される。

$ cd ~/.ghq/github.com/yukimemi/hogehoge
direnv: loading .envrc
direnv: export ~PATH
$ cd
direnv: unloading

これで、プロジェクトローカルなコマンドをかんたんに実行出来る。


参考:

direnvを使おう - Qiita

direnvで解決するGOPATHの3つの問題点 - None is None is None

Big Sky :: bundle exec がウザい