[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로 개발된 기존 프로젝트에서 이런 문제가 발생하여 크게 고생하였습니다. 이 블로그 포스트가 저와 같은 문제를 겪는 분들에게 도움이 되었으면 좋겠습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts