📂

asdf - node.js ディレクトリごとのバージョン管理

2022/03/14に公開

PCが変わったこともあり、おさらいもかねて。
古い環境ではあるんですが、検証環境の用意がなくPCに環境構築してトライ。

前提

macOS

% sw_vers
ProductName:	macOS
ProductVersion:	12.2.1

Homebrew

% brew -v
Homebrew 3.4.1
Homebrew/homebrew-core (git revision 7f1b3091246; last commit 2022-03-14)
Homebrew/homebrew-cask (git revision 96b4f7dabd; last commit 2022-03-14)

ログ

インストール

# (私の場合)必要なパッケージをインストール
# 最後の「coreutils」「curl」「git」くらいでも十分
% brew install coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc unzip curl coreutils curl git

# 本体インストール
% brew install asdf

# PATH更新 ※ zshを使用しています。
% echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc
% source ~/.zshrc

# 動作確認
% asdf plugin list all

バージョン管理

# バージョン管理用のファイル設置
% cd ~/hoge/v1
% vi .tool-versions
% cat .tool-versions
nodejs lts-fermium

# asdfでのバージョン確認
% asdf current
nodejs          lts-fermium     Not installed. Run "asdf install nodejs lts-fermium"

# asdfでのインストールがまだなので、インストールしてあげる(結構時間かかります)
% asdf install nodejs lts-fermium
Installing alias lts-fermium as 14.19.0
Cloning node-build...
Downloading node-v14.19.0.tar.gz...
-> https://nodejs.org/dist/v14.19.0/node-v14.19.0.tar.gz

WARNING: node-v14.19.0 is in LTS Maintenance mode and nearing its end of life.
It only receives *critical* security updates, *critical* bug fixes and documentation updates.

Installing node-v14.19.0...
Installed node-v14.19.0 to /Users/hogefuga/.asdf/installs/nodejs/14.19.0

Linking "lts-fermium" to "14.19.0"

# バージョン確認
% asdf current                   
nodejs          lts-fermium     /Users/hogefuga/iv_site/v2.0/.tool-versions
% node -v                        
v14.19.0

追記:M1で対応しないパッケージの場合

でましたこれ🙃

コケるケース

% asdf install nodejs 13.2.0
Trying to update node-build... ok
Downloading node-v13.2.0.tar.gz...
-> https://nodejs.org/dist/v13.2.0/node-v13.2.0.tar.gz

WARNING: node-v13.2.0 is in LTS Maintenance mode and nearing its end of life.
It only receives *critical* security updates, *critical* bug fixes and documentation updates.

Installing node-v13.2.0...

BUILD FAILED (OS X 12.2.1 using node-build 4.9.70-5-gb9c8f04d)

Inspect or clean up the working tree at /var/folders/_d/q_4n0_qn66jggblwgty9qb000000gn/T/node-build.20220314122022.45853.kN6Imm
Results logged to /var/folders/_d/q_4n0_qn66jggblwgty9qb000000gn/T/node-build.20220314122022.45853.log

Last 10 log lines:
^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s:2731:8: error: invalid alignment value
.align 32
       ^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s:3031:1: error: unknown directive
.size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext
^
make[1]: *** [/private/var/folders/_d/q_4n0_qn66jggblwgty9qb000000gn/T/node-build.20220314122022.45853.kN6Imm/node-v13.2.0/out/Release/obj.target/openssl/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.o] Error 1
rm d7a05ecdf626c18372eb32e377c5c9372dae8527.intermediate
make: *** [node] Error 2

対策

これもDockerのときと同じで、アーキテクチャを指定した状態での実行が必要。以下、参考文献。
https://github.com/asdf-vm/asdf-nodejs/issues/189#issuecomment-757048599

% arch -x86_64 asdf install nodejs 13.2.0
Trying to update node-build... ok
Downloading node-v13.2.0-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v13.2.0/node-v13.2.0-darwin-x64.tar.gz

WARNING: node-v13.2.0-darwin-x64 is in LTS Maintenance mode and nearing its end of life.
It only receives *critical* security updates, *critical* bug fixes and documentation updates.

Installing node-v13.2.0-darwin-x64...
Installed node-v13.2.0-darwin-x64 to /Users/hogefuga/.asdf/installs/nodejs/13.2.0

いけたー!

インストール以降のコマンドにも注意

M1で古い環境を利用する場合には、アーキテクチャを指定した状態で実行しなければならないみたいです。

% arch -x86_64 npm install

それにしたって、バージョン管理が手軽で楽になりました。

Discussion