✈️
Node.js のバージョン管理を Volta から asdf へ移行した
Node.jsのバージョン管理を Volta から asdf に移行した手順を記述する。
前提条件
- macOS
- Homebrew をインストール済み
- Volta を Node.js バージョン管理ツールとして使用中
-
curl https://get.volta.sh | zsh
で導入した
-
- Yarn をパッケージマネージャとして使用中
- シェルとして zsh を使用
移行手順
1. asdf のインストール
Homebrew を使用して asdf をインストールする。
# Homebrew で asdf をインストール
brew install asdf
# shell の設定ファイルに以下を追加
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc
source ~/.zshrc
2. Node.js 環境の構築
asdf プラグインをインストールし、Node.js の環境を設定する。
# Node.js プラグインのインストール
asdf plugin add nodejs
# 最新の LTS バージョンをインストール(使用したいバージョンで OK)
asdf install nodejs lts
# グローバルのデフォルトバージョンを設定
asdf global nodejs lts
3. Volta の削除
Volta の設定と関連ファイルを削除します。
# Volta でインストールしたパッケージの確認
# 確認結果を保存しておくと、後から必要なパッケージが判明した時に再インストールが容易になる。
volta list all
# Volta 設定を削除
rm -rf ~/.volta
# 必要なら、
# 各種リポジトリで package.json から Volta 設定を削除する
# "volta": { ... } の部分を削除
4. 動作確認
新しい環境の動作を確認する
# Node.jsのバージョン確認
node --version
# npm の動作確認
npm --version
# グローバルパッケージの確認
npm list -g --depth=0
Yarn の設定
Yarnは asdf プラグインではなく、Corepack を使用する。
# 1. Corepackの有効化
corepack enable
# 2. 指定バージョンの Yarn を準備
corepack prepare --activate yarn@4.1.1
# 3. Node.js のシムを更新
asdf reshim nodejs
# 4. シェルの再起動
source ~/.zshrc
トラブルシューティング
asdf インストール時の問題
coreutils との競合
エラー文
Error: Cannot install coreutils because conflicting formulae are installed.
md5sha1sum: because both install `md5sum` and `sha1sum` binaries
対応方法
md5sha1sum のアンインストールは、他ツールとの依存関係に注意してください。
# md5sha1sum をアンインストール
brew uninstall md5sha1sum
# その後 asdf をインストール
brew install asdf
実行権限の問題
エラー文
permission denied: /opt/homebrew/opt/asdf/libexec/asdf.sh
対応方法
# 実行権限を付与
chmod +x /opt/homebrew/opt/asdf/libexec/asdf.sh
最後に確認しておくと良いこと
- シェルの設定ファイル(~/.zshrc)に asdf の設定が正しく追加されているか
- asdf のプラグインが正しくインストールされているか(
asdf plugin list
で確認) - Node.js のバージョンが正しく設定されているか(
asdf current
で確認) - プロジェクトの
.tool-versions
ファイルが正しく作成されているか
新たに Node.js と Yarn の組み合わせインストールしたい時
以下事例のコマンド実行例
- Node.js: v18.18.2
- Yarn: 4.1.1
asdf install nodejs 18.18.2
corepack enable
corepack prepare --activate yarn@4.1.1
asdf reshim nodejs
Discussion