※ まだ一部(?)arm64対応していないnodeのネイティブモジュール(私の場合はserialportとsqlite3)があるために非常に面倒になっている模様(2022/4/29)。
再コンパイルが必要なモジュールがなければ以下の面倒な内容は不要かと思います。
【結論】
(今の所?)ネイティブモジュールがarm64非対応なものが一つでもあればnode.js関連全てをIntel環境で行う必要がある。
※ そもそもよくわからずやっているので当然の話かもしれません。
どっちのバイナリか怪しいときは
$ lipo -archs path/to/binary/file
で確認します。
1. ターミナルをx86_64用とarm64用に分ける
多分こちらの記事を参考にiTermを2個ドックに配置とHomebrewとanyenvの設定をする
https://qiita.com/funatsufumiya/items/cec08f1ba3387edc2eed
と開発環境であるVisual Studio Codeの設定を追加し、「新しいターミナル」の選択肢にx86を追加する
多分こちらを参考にしたと思われます。
https://zenn.dev/treastrain/articles/4ac7aa31c8cbc9
結果的にプロジェクトのsettings.jsonには
"terminal.integrated.defaultProfile.osx": "bash_x86",
"terminal.integrated.profiles.osx": {
"bash_x86": {
"path": "/usr/bin/arch",
"args": [
"-x86_64", "bash"
],
"icon": "terminal-bash"
},
},
"terminal.integrated.env.osx": {
"PATH": "${workspaceRoot}/node_modules/.bin:${env:PATH}"
},
が追加されています(後ろの方の”PATH”はちょっと関係ないと思います)
2. それぞれの環境用にnode.jsをセットアップする
1.でanyenvを設定した続きで、node.jsの環境用の記述を.bash_profile(など)に追加する
以下現状の.bash_profileの先頭部分
if [ "$(uname -m)" = "arm64" ]; then
# arm64
eval "$(/opt/homebrew/bin/brew shellenv)"
export PATH="$PATH:/opt/homebrew/bin"
export PATH="$PATH:/opt/homebrew/opt/mysql-client/bin"
export ANYENV_ROOT="$HOME/.anyenv"
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
else
# x86_64
export PATH="$PATH:/opt/homebrew-x86_64/bin"
eval "$(/usr/local/bin/brew shellenv)"
export ANYENV_ROOT="$HOME/.anyenv_x86_64"
export PATH="$HOME/.anyenv_x86_64/bin:$PATH"
eval "$(anyenv init -)"
export NODENV_ROOT=$HOME/.anyenv/envs/nodenv_x86_64
export PATH=$NODENV_ROOT/bin:$PATH
eval "$(nodenv init -)"
fi
arm64のNODENV_ROOTが設定されていないのは今の所使っていないため。
$ exec $SHELL -l
などで.bash_profileを実行し直してx86_64のターミナルでnodenvをインストール。
$ brew install nodenv
インストール後もう1回
$ exec $SHELL -l
をやったかも。
nodenvが入ったら適当なバージョンのnode.jsをインストール。
ただし私の場合は
$ nodenv install -l
で
$ nodenv: no such command 'install'
となったので、こちらを参考に
node-buildのプラグインを入れました。
$ mkdir -p "$(nodenv root)"/plugins
$ git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build
<
h3>モジュールを入れ直し(必要に応じて)
一旦arm64の環境でネイティブモジュールをコンパイルしたりした場合は
$ rm -rf node_modules
でnode_modulesディレクトリを空にして
$ npm install --arch=x64
でモジュールを入れ直して( –arch=x64が肝だ!と思いましたが、Intel環境でずっとやっているのであれば不要な気もします。。)
$ electron-rebuild -f
でネイティブモジュールを再コンパイル。
なぜか
$ npm rebuild
をすると動かなくなるので、その場合は
$ electron-rebuild -f
をすると動くようになりました。
コメントを残す