🖥️

M1 (Apple Silicon) Mac の mise で Node.js v14 をインストールする方法

2024/10/11に公開

mise を使用して Node のバージョン管理をしている場合、Node.js v14 をインストールしようとすると以下のようなエラーが発生することがあります。

> mise install node@14

[ERROR] sh failed
Error:
   0: sh exited with non-zero status: exit code 2

Location:
   src/cmd.rs:394

Version:
   2024.9.6 macos-arm64 (2024-09-18)

14系以下のarm64向けバイナリは公開されておらず、ビルドに失敗するのが原因のようです。

https://github.com/nodejs/node/issues/37309

対策方法

x86_64 バージョンのmise を使う

mise の x86_64 バージョンを使用することでインストールできます。

A common reason for doing this is to support compiling node <=14.

https://mise.jdx.dev/tips-and-tricks.html#macos-rosetta

mise-x64 のインストール

mkdir -p ~/.local/bin
curl https://mise.jdx.dev/mise-latest-macos-x64 > ~/.local/bin/mise-x64
chmod +x ~/.local/bin/mise-x64
~/.local/bin/mise-x64 --version # mise 2024.10.1 macos-x64 (7184e60 2024-10-07)

mise-x64 を使って 14系の Node をインストール

mise-x64 use node@14
node -v # v14.21.3

ソースコードからビルドする

v14.16.0 以降であればarm64対応がバックポートされており、ローカルでビルドすることも可能です。

https://github.com/nodejs/node/issues/38005

ただし私の環境ではビルド時にコンパイルオプションを付ける必要がありました。

https://github.com/jdx/mise/issues/2302#issuecomment-2240019542

CPPFLAGS="-Wno-enum-constexpr-conversion" mise use node@14.16.0
node -v # v14.16.0

-Wno-enum-constexpr-conversion は列挙型の変換に関する警告を抑制するオプションです。
そのためビルド自体は成功するのですが、動作に影響があるかもしれません。
また Clang 17以降で削除される可能性があるため、x86_64 バージョンで動かすほうが無難そうです。

https://github.com/nodejs/node/issues/52230

株式会社FP16

Discussion