zeosuttです。
4月ですね。
ということは、間もなくNode.js 12がサポート終了となります。早めに後継LTSバージョンへ移行しましょう。
さて、その一つ前のLTSバージョンといえばNode.js 10ですが、
ふとM1 Macで nodenv
を使ってNode.js 10に切り替えたくなったので、試してみました。
普通にインストール(失敗)
まずはインストール。いつも通り、普通に nodenv install
してみます。
$ nodenv install 10.24.1 Downloading node-v10.24.1.tar.gz... -> https://nodejs.org/dist/v10.24.1/node-v10.24.1.tar.gz WARNING: node-v10.24.1 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-v10.24.1... BUILD FAILED (OS X 12.3 using node-build 4.9.75) Inspect or clean up the working tree at /var/folders/t4/80l1z5p97p740xdhd30p79hm0000gn/T/node-build.20220407153822.26770.hlBy7W Results logged to /var/folders/t4/80l1z5p97p740xdhd30p79hm0000gn/T/node-build.20220407153822.26770.log Last 10 log lines: ^ ../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s:2733:8: error: invalid alignment value .align 32 ^ ../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s:3035:1: error: unknown directive .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext ^ make[1]: *** [/private/var/folders/t4/80l1z5p97p740xdhd30p79hm0000gn/T/node-build.20220407153822.26770.hlBy7W/node-v10.24.1/out/Release/obj.target/openssl/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.o] Error 1 rm 0ecf2830a96d494ab5665be6dfef23082ad49156.intermediate make: *** [node] Error 2
コケます。
linux-x86_64
とか言ってるので、まあそりゃいかんよな、という感じです。
Node.js 14より前はM1 Macに対応していないので、仕方ないですね。
ちなみに、Node.js 12.22.9は一応ビルドに通りました。正しく動くかどうかは分かりませんが。
x64版のビルド済みバイナリを取得してインストール
ビルドができないので、おとなしくビルド済みバイナリ(x64版)を取得します。
手動
バイナリの取得とインストールを手動でやってみます。
まずはバイナリの取得。
の中で、欲しいのは node-v10.24.1-darwin-x64.tar.gz
または node-v10.24.1-darwin-x64.tar.xz
ですね。
$ wget -q https://nodejs.org/dist/v10.24.1/node-v10.24.1-darwin-x64.tar.gz $ tar -xf node-v10.24.1-darwin-x64.tar.gz $ rm node-v10.24.1-darwin-x64.tar.gz
次に、
Alternatively to the install command, you can download and compile Node manually as a subdirectory of ~/.nodenv/versions/.
を参考にインストール。
$ mv node-v10.24.1-darwin-x64 $(nodenv root)/versions/10.24.1
確認。
$ nodenv versions 10.24.1
良い感じです。
自動
......いやいや、面倒でしょ。
ということで、nodenvに任せます。
$ arch -x86_64 nodenv install 10.24.1 Downloading node-v10.24.1-darwin-x64.tar.gz... -> https://nodejs.org/dist/v10.24.1/node-v10.24.1-darwin-x64.tar.gz WARNING: node-v10.24.1-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-v10.24.1-darwin-x64... Installed node-v10.24.1-darwin-x64 to /Users/mitsuru/.anyenv/envs/nodenv/versions/10.24.1
確認。
$ nodenv versions 10.24.1
ちゃんと入りましたね。
補足
x64な環境で動かしたらそりゃ上手く行くでしょ、という話ではあるんですが、せっかくなので補足。
そもそも、 nodenv install 10.24.1
が node-v10.24.1.tar.gz
を落としてビルドし始めたのは、 uname
の結果から得たプラットフォーム darwin-arm64
に対応するエントリが
に存在しないからです。
M1 Mac向けのバイナリが配布されるようになったのはNode.js 16からなので、当然ですね。
arch -x86_64
を付けて動かせば darwin-x64
に対応するエントリを探すようになるため、上手く行くというわけです。
切り替え
インストールできたので、切り替えます。
$ nodenv local 10.24.1
バージョンと、ついでにアーキテクチャを確認。
$ node --version v10.24.1 $ node -p process.arch x64
M1 Macで nodenv
を使ってNode.js 10に切り替えることができました。