[Mac M2シリコンチップ] NPMパッケージのdeasyncのインストールエラー

2023-12-03 hit count image

Mac M2シリコンチップでNPMパッケージのdeasyncをインストールする時、node-gypエラーを解決する方法を共有します。

概要

最近新しい開発マシン(Macbook M2 Max)を使うことになりました。そして、Vue2で開発された既存プロジェクトの開発環境を設定する際に次のようなエラーが発生しました。

error /node_modules/deasync: Command failed.
Exit code: 1
Command: node ./build.js
Arguments:
Directory: /node_modules/deasync
Output:
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | arm64
gyp info find Python using Python version 3.11.6 found at "/opt/homebrew/opt/[email protected]/bin/python3.11"
gyp info spawn /opt/homebrew/opt/[email protected]/bin/python3.11
gyp info spawn args [
gyp info spawn args   '/.nvm/versions/node/v18.16.1/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/node_modules/deasync/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/.nvm/versions/node/v18.16.1/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Library/Caches/node-gyp/18.16.1/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Library/Caches/node-gyp/18.16.1',
gyp info spawn args   '-Dnode_gyp_dir=/.nvm/versions/node/v18.16.1/lib/node_modules/npm/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Library/Caches/node-gyp/18.16.1/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/node_modules/deasync',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/deasync/src/deasync.o
  SOLINK_MODULE(target) Release/deasync.node
rm -no  /lib -o Release/deasync.node Release/obj.target/deasync/src/deasync.o
rm: illegal option -- n
usage: rm [-f | -i] [-dIPRrvWx] file ...
       unlink [--] file
make: *** [Release/deasync.node] Error 64
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/.nvm/versions/node/v18.16.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23)
gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Darwin 23.1.0
gyp ERR! command "/.nvm/versions/node/v18.16.1/bin/node" "/.nvm/versions/node/v18.16.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /node_modules/deasync
gyp ERR! node -v v18.16.1

このブログポストではMac M2シリコンチップNPMパッケージのdeasyncをインストールする時、発生するnode-gypエラーを解決する方法を共有します。

エラー原因

現在Vue2プロジェクトでdeasyncを直接使ってないです。それでなぜこのエラーが発生するのか理解できませんでした。

もっと詳しく調べたらvue-jestライブラリがdeasyncを使っててこのエラーが発生することが分かりました。

vue-jestのバージョンが低くてdeasyncのバージョンも低くて発生すると思って、最新バージョンのdeasyncをインストールしてみましたが、やはり同じエラーが発生しました。

色々調べて、Macbook M2 Maxのシリコンチップ(arm64)が問題になることが分かりました。私の開発環境は次の通りです。

  • Apple M2 Max
  • Node: 18.16.1
  • Yarn: 1.22.19
  • Python: 3.11.6

解決方法

私はNodeバージョンを管理するためNVMを使っています。色んな方法を試してみましたが、全部失敗しました。

しかし、次のようにzshの設定をx86_64で変更してNodeを新しくインストールしたら問題が解決されました。

  1. 既存のNode削除
nvm uninstall 18.16.1
  1. zshの設定をx86_64で変更
arch -x86_64 zsh
  1. Nodeの再インストール
nvm install 18.16.1
exit
  1. パッケージのインストール
yarn install

完了

私は開発環境を自動で構成するためHomebrewShell Scriptを使っています。

新しい開発マシン(Macbook M2 Max)で自動化で開発環境を設定する時、特に問題はありませんでした。しかし、Vue2で開発された既存プロジェクトでこのような問題が発生して大変苦労しました。このブログポストが私と同じ問題を経験する方に役に立てば嬉しいです。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts