24
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.

【環境構築】zsh環境下でnvmをインストールしてプロジェクトの `.nvmrc` に応じてNode.jsのバージョンを自動で変える

Last updated at Posted at 2019-09-04

Node.jsのバージョンを指定する .nvmrc があるリポジトリを触ることになったので nvm を導入してみました ☀️

anyenv でインストールした ndenv をアンインストールする

nvmndenv は共存できなさそうなので、 ndenv を使っている場合は ndenv の方をアンインストールします。

anyenv uninstall ndenv

nvm のインストール

nvm のインストールは次のコマンドを実行しますが、
nvm が更新されている場合があるので https://github.com/nvm-sh/nvm#install--update-script を参照してインストールのコマンドを確認しましょう。😳

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

実行したあとは .zshrc に次の行を追加します。

source ~/.nvm/nvm.sh

そして、新しく端末を開くか (exec $SHELL -l) を実行して .zshrc を読み込みます。

Node.jsのインストール

まず、インストールできるNode.jsの一覧を表示します。

nvm ls-remote

バージョンを指定してNode.jsをインストールします。

nvm install v10.16.3

インストールしたNode.jsを使うには nvm use <バージョン> を実行します。

nvm use v10.16.3

.nvmrc に応じてNode.jsを自動選択するレシピを導入する( .zshrc を分割する)

移動したディレクトリ(プロジェクト)に .nvmrc があると自動でNode.jsを選択するレシピが公開されています。

インストールの方法ですが、

Put this into your $HOME/.zshrc to call nvm use automatically whenever you enter a directory that contains an .nvmrc file with a string telling nvm which node to use:

とあり、 .zshrc に記述することになっています … .zshrc が長くなると困りますよね?🤔

そこで .zshrc を分割しましょう😃
まず次のようなディレクトリ構成にします。

~/
└── .zshrc
└── ~/.zsh.d
    └── nvm-autoload.zsh

次に、 ~/.zsh.d/nvm-autoload.zsh を作成して、次の順番の内容にします。

~/.zsh.d/nvm-autoload.zshで記述する内容
1. source ~/.nvm/nvm.sh
2. https://github.com/nvm-sh/nvm#zsh のレシピ(`# place this after nvm initialization!` と書いてあります)

最後に、 ~/.zshrc を編集します。
nvm インストール時に追加した source ~/.nvm/nvm.sh を削除してから 次の内容を挿入します。(http://fnwiya.hatenablog.com/entry/2015/11/03/191902 と内容は同一です)

.zshrc
ZSHHOME="${HOME}/.zsh.d"

if [ -d $ZSHHOME -a -r $ZSHHOME -a \
     -x $ZSHHOME ]; then
    for i in $ZSHHOME/*; do
        [[ ${i##*/} = *.zsh ]] &&
            [ \( -f $i -o -h $i \) -a -r $i ] && . $i
    done
fi

.nvmrc がない場所でデフォルトの Node.js を決める

これで .nvmrc の内容に応じて自動でNode.jsのバージョンが選択されますが、 .nvmrc がない場所ではどうなるのでしょうか。
新しく端末を開くなどで .nvmrc がない場所に移動すると次のメッセージが表示されます

ディレクトリを移動して .nvmrc が見つからない度にこのメッセージが出る😖ので これを修正しましょう。

.nvmrcがない場所で表示されるメッセージ
Reverting to nvm default version
N/A: version "default -> N/A" is not yet installed.

You need to run "nvm install default" to install it before using it.

メッセージや、先程配置したレシピの内容を見るとわかりますが nvm use default が実行されています☺️
defaultnvm のエイリアスになっているため default が何なのかを nvm alias で設定します。

$ nvm alias default v10.16.3
default -> v10.16.3

間違えて設定してしまった場合は nvm unalias で削除できます😁

$ nvm unalias default
Deleted alias default - restore it with `nvm alias "default" "v10.16.3"`

設定されているaliasなどは nvm ls で確認できます。

$ nvm ls
       v10.16.3
node -> stable (-> v10.16.3) (default)
stable -> 10.16 (-> v10.16.3) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/dubnium (-> v10.16.3)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.16.1 (-> N/A)
lts/dubnium -> v10.16.3

.nvmrc があるNode.jsプロジェクトに移動してみる

.nvmrc があるディレクトリに移動してみましょう。
nvm でインストールしていないバージョンでも 自動でインストールして使ってくれます。便利!🤩

nvmでインストールしていないバージョンを自動でインストール・選択する例
$ node -v
v10.16.3

$ cd awesome-project
Found '/Users/ysd/awesome-project/.nvmrc' with version <8.9.0>
Downloading and installing node v8.9.0...
Downloading https://nodejs.org/dist/v8.9.0/node-v8.9.0-darwin-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v8.9.0 (npm v5.5.1)

$ node -v
v8.9.0

参考

ずっとUbuntu+zshでnvmを使いたかったんだよ!! - Qiita
https://qiita.com/Takumi_Kaibara/items/7c5e3ca735bc0167e83d

zsh設定ファイル(.zshrc)を分割する - fnwiya's quine
http://fnwiya.hatenablog.com/entry/2015/11/03/191902

nvmのデフォルトのバージョンの変え方 - Qiita
https://qiita.com/yuzooho/items/a5072ade3a0787640ef9

24
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
24
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?