macOS(M1)에 node 설치하기

 

글쓴이는 최신형 mac book을 새로 주문했습니다. 이전에 개발하던 프로그램들을 모두 하나씩 설치하는데, 새로운 mac book 의 환경이 달라져서 환경세팅을 하는도중에 몇가지 걸림돌들이 있었습니다. 그중 nodeJS 환경을 세팅하는데 차이가 있어서 글을 남깁니다.

 

현재 글쓴이의 mac book 스펙은 아래와 같습니다. M1칩을 사용하고 있는데, 이 칩은 Apple 이 자체개발한 것입니다. 이전 모델까지는 Intel사에서 만든 칩을 사용했었는데, 앞으로는 직접 개발한 M1칩을 사용한 것입니다. 그리고, 이 Intel과 M1칩은 다르기 때문에, 이전에 사용하던 프로그램들이 Intel과 M1 중에 어떤 환경을 대상으로 빌드되었는지를 보고 설치를 해주어야 합니다. 다시 말해서, 이전 프로그램들을 그대로 설치할 수 없는 경우들이 있다는 것입니다.

 

 

개발환경

  • mac book pro
  • macOS Monterey
  • 버전 12.2.1
  • 칩 Apple M1 Max
  • node 14.17.0

 

 

node 14 이상을 설치하려는 경우

error 내용

node 14.17.0 버전을 설치하려고 하는데 아래와 같이 에러가 발생했습니다. 이유는 M1칩에서 낮은 node 버전을 설치하려 시도했기 때문입니다. 아무래도 낮은 버전의 node 들은 Intel 칩만을 대상으로 빌드되었고, 높은 버전의 node 들은 M1 칩에서도 동작가능하도록 빌드되었기 때문으로 보입니다. 따라서, 낮은 버전의 node 들을 M1 칩에서 동작하기 위해서는 그대로 설치하면 안되고, [에러 1 : node 설치하기 (node 14 이상)] 가이드에 따라 설치해주면 되겠습니다.

...
clang: error: no such file or directory: 'CXX=c++'
...

 

 

node  설치하기

1. nvm 설치

$ brew install nvm

 

2. nvm 폴더 생성

$ mkdir ~/.nvm

 

3. .zshrc 편집

$ vi ~/.zshrc
export PATH=/opt/homebrew/bin:$PATH

export NVM_DIR="$HOME/.nvm" 
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && . "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm 
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && . "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion

 

4. .zshrc 내용 pc에 적용

$ source ~/.zshrc

 

5. nvm 설치 (낮은 버전 ex, 14.17.0)

$ nvm install 14.17.0
$ node --version

 

 

node 14 이하를 설치하려는 경우

error 내용

M1칩 환경에서 node 개발 환경 관련 내용을 찾다보니, 글쓴이처럼 M1칩에서 node 14버전 이상은 [이슈1 : node 설치하기 (node 14d 이상)]에 따라 환경세팅이 가능하지만 node 14버전 이하를 사용하려할 때는 아래처럼 에러가 발생해서, 추가적인 세팅을 해주어야한다고 합니다. nvm 깃허브 공식 사이트에 나와있는 것처럼 아래가이드에 따라 세팅해주면 실행됩니다. (직접 해보진 않아서 해당 문제에 부딪치면 그때 본 내용을 업데이트해두겠습니다.)

...
../deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aes-x86_64.s:2:1: error: unknown directive .type
...

 

 

node  설치하기

Macs with M1 chip

M1 칩을 사용하는 Mac 사용자들을 위한 가이드

 

So, if you want to run a version prior to v16.0 on an M1 Mac, it may be best to compile node targeting the x86_64 Intel architecture so that Rosetta 2 can translate the x86_64 processor instructions to ARM-based Apple Silicon instructions. Here's what you will need to do:

만약에, M1 칩에서 node 16 이전버전을 사용하기를 원한다면, x86_64 Intel 칩 위에서 실행가능하도록 컴파일된 것을 사용하는 것이 가장 좋습니다.  macOS 에서 그렇게 실행하도록 도와주는 Rosetta 2 라는 프로그램이 있습니다. 이 프로그램은 x86_64 명령어들을 Apple Silicon 기반의 명령어들로 번역해줌으로써 M1 칩에서 동작가능하게 만듭니다. 자, 이어서 아래 가이드에 따라 Rosetta 를 실행해보겠습니다.

 

This same thing can also be accomplished by finding the Terminal or iTerm App in Finder, right clicking, selecting "Get Info", and then checking the box labeled "Open using Rosetta". Open a shell that's running using Rosetta

Finder 를 열고 > 응용프로그램의 Terminal 에서 > 마우스 우클릭 > 정보 가져오기 > Rosetta를 사용하여 열기를 체크하고 실행을 합니다. 그리고 아래 명령어를 실행합니다.

$ arch -x86_64 zsh

Install whatever older version of node you are interested in. Let's use 12.22.1 as an example. This will fetch the node source code and compile it, which will take several minutes.

오래된 node 버전을 설치해보세요. 그럼 정상적으로 설치될 것입니다.

$ nvm install v12.22.1

 

 

 

참고

(github) nvm 링크