ElectronをM1のmacで動かすまでの道のり

※ まだ一部(?)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'

となったので、こちらを参考に

nodenv installを実行したら`no such command`となった件


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

をすると動くようになりました。


コメントを残す

メールアドレスが公開されることはありません。

92 − = 87