M1에서 Rosetta로 Node 사용하기
인텔에서 잘 되는게 M1에서 돌리니 갑자기 에러를 뿜으면서 동작 안했습니다. 이럴 때는 rosetta를 이용해서 Intel로 돌리면 됩니다.
제가 Node 14를 사용하고 싶은데 Node 14버전은 M1을 지원하지 않습니다. 이럴 때 쓸 수 있는 방법입니다.
한번 터미널을 rosetta
를 사용해서 arm64가 아닌 intel로 아키텍처로 쉘을 실행해서 Node 14를 사용해보겠습니다.
준비물
- 애플 실리콘(M1) 맥
nvm
- 만약에 nvm을 사용하고 있지 않다면 먼저 깔아주세요! (
brew install nvm
)
- 만약에 nvm을 사용하고 있지 않다면 먼저 깔아주세요! (
- (iTerm)
- 굳이 iTerm이 아니더라도 상관없긴 합니다! 다른 터미널 앱에서 똑같이 해도 됩니당.
Rosetta로 Node 실행하는 법
1. 현재 쉘의 아키텍처 확인하기
아래의 명령어는 현재 기기의 아키텍처 종류를 출력해줍니다.
arch
![](https://blog.kakaocdn.net/dn/77Lnd/btrFoRCQlFz/c3te1ymkKq9plPa9O384L0/img.png)
![](https://blog.kakaocdn.net/dn/bvQEpM/btrFreDVHOE/JOKjjrakHQvkhox9Ab5kf0/img.png)
M1의 아키텍처인 arm64가 뜹니다.
2. Rosseta를 사용해서 zsh을 실행하기
아래의 명령어를 쓰면 로세타가 인텔 아키텍처로 에뮬레이팅해서 zsh을 실행해줍니다.
arch -x86_64 zsh
![](https://blog.kakaocdn.net/dn/dQG1tw/btrFo07IORb/Xs7XsSNutLwJmGkiBf2Hck/img.png)
이 명령어가 안 먹는 경우도 있다고 합니다.
그러면 앱 자체를 rosetta를 사용하도록해서 실행하면 됩니다.
위의 명령어가 안 먹는 경우 참고하세요.
1. Finder를 켜서 좌측 사이드바를 눌러서 응용 프로그램
디렉터리로 옵니다.
![](https://blog.kakaocdn.net/dn/ej8x9j/btrFo0fAojf/DZ7jDZrxkc2uDYyKshKjW1/img.png)
2. iterm.app
을 복제합니다.
![](https://blog.kakaocdn.net/dn/87XCz/btrFoB8x6SH/UCLQpQMwEXnzFk95PZgeq1/img.png)
3. 복사본을 iTerm Intel로 이름을 바꿔줍시다
![](https://blog.kakaocdn.net/dn/bnIgTq/btrFqrQ3BHG/LuKC7DwC28wZ2507kxUtEk/img.png)
4. 복제한 iTerm을 우클릭해서 정보 가져오기를 눌러줍니다.
![](https://blog.kakaocdn.net/dn/N7Wam/btrFpvsSBp0/2EWK0kVZkp9IzIWpYgMay0/img.png)
5. Rosetta를 사용하여 열기를 체크합니다.
![](https://blog.kakaocdn.net/dn/bGfvr0/btrFrdruyVK/aFGiSYe9v6fYyUTmlxaTXk/img.png)
6. 그 앱을 실행해서 Intel 아키텍처로 돌아가는지 확인합니다.
![](https://blog.kakaocdn.net/dn/enGYNL/btrFpGANboZ/JPPOU4TmYjl6BS3AYgubdK/img.png)
3. Node로 아키텍처를 출력해봅니다.
console.log
로 process의 아키텍처를 확인하면 됩니다.
node -e '(console.log(process.arch))'
![](https://blog.kakaocdn.net/dn/dbFCw4/btrFpu1N4Oc/IvBgFf3s0yksMeNKeIHHN0/img.png)
아직 arm64로 뜹니다. 현재 Node가 아직 M1 아키텍처로 돌아가고 있다는 뜻입니다.
제가 생각하기에는 쉘만 인텔이지 결국 호출하는 것은 처음에 M1에서 깔아준 Node 바이너리기 때문에 arm64로 돌아가는 것이지 않을까 추측해봅니다. (인텔로 구동되는 쉘에서 arm64 프로세스를 띄우는 것인가..? 저도 확실하지 않네요. 정확하게 아시는 분은 댓글 부탁드립니닷)
이제 남은 일은 Intel 버전의 노드를 까는 것입니다.
4. Intel 아키텍처 바이너리인 node14 설치
먼저 arch
명령어로 인텔로 에뮬레이션되고 있는지(i386이 잘 출력되는지) 확인합니다.
# node14 LTS 설치
nvm install lts/fermium
# nvm을 이용해서 node14를 사용하도록 설정
nvm use lts/fermium
![](https://blog.kakaocdn.net/dn/bBIEus/btrFpvGp3G2/t171sMZAnPFMuFWz2uktp0/img.png)
다시 5.에서 했듯이 node로 아키텍처를 출력해봅니다. x64가 뜬다면 성공입니다.
끝
꼼수
그래서 뭔가 묘한데 nvm use {v16이상}
을 하면 M1으로 돌아가고 nvm use {v14이하}
로 하면 Intel 버전으로 쓸 수 있습니다.
![](https://blog.kakaocdn.net/dn/s80b2/btrFooVsnX4/GuDlS8REca8gPX91Icz71K/img.png)
이렇게 써도 문제 없겠죠..?
나중에 문제 생기면 와서 수정하겠습니다 ㅎㅎ.
개인적인 이야기
Jbee님이 만드신 gastsby-starter-bee가 이뻐서 이걸로 TIL 블로그 하나 만들려고 했는데...
![](https://blog.kakaocdn.net/dn/KD1P9/btrFnAbduBe/parYSHI0aLfuZkeoCt1DFK/img.png)
node-sass에서 계속 빌드에러 나길래 llvm
깔고.. llvm의 clang사용하도록하고 필요한 dependency(libvips) 수동 빌드하고.... makefile 수정하다가 이건 아닌 것 같아서 혹시나 싶어서 rosetta로 실행해서 하니 바로 해결되네요ㅎㅎㅎ.
![](https://blog.kakaocdn.net/dn/yLMDK/btrFsfiiEOW/D7eoAFoirJZOrBO890V6bk/img.png)
보니까 Intel 버전이면 node-sass모듈은 미리 빌드된거 다운받아서 쓰네요.. M1도 미리 빌드해준거 곧 만들어주지 않을까요..?
휴
![](https://blog.kakaocdn.net/dn/cw2PBW/btrFoB1FdnU/ktNBe9vkN4Tr9qM2zvMrqk/img.png)
앗 된줄 알았는데;; 저는 그냥 리눅스 서버 파서 써야겠어요.
![](https://blog.kakaocdn.net/dn/Rqz7J/btrFptWaGSv/wgZvwtZg01EkgWh07HOudk/img.png)
(몇 시간 삽질 후)
암튼 성공했습니닷! 설치한 모듈의 버전을 올리니 Rosetta로 돌아가는 Node상에서 작동하네여.. ㅠㅠ
일기장같은 글은 티스토리 블로그에 적기 싫어서 만든 제 일기장 블로그입니닷. 아마 여기세 노트 카테고리에 적던 글들을 좀 더 세분화해서 여기에 많이 적을 것 같습니다.
많이 놀러오세영! ㅎㅎ
일기장 블로그 grootil: https://grootil.netlify.app
![](https://blog.kakaocdn.net/dn/cx68uv/btrFwutnzYN/kYaqCYRnm6KtKzNnl6wVxk/img.png)
암튼 즐코하세용!!
댓글
이 글 공유하기
다른 글
-
Mac Sequoia - multipass timed out waiting for response 해결법
Mac Sequoia - multipass timed out waiting for response 해결법
2024.10.14 -
Mac 전용 CLI 명령어
Mac 전용 CLI 명령어
2022.07.17 -
Mac에서 code 명령어가 작동 안 할 때 해결법
Mac에서 code 명령어가 작동 안 할 때 해결법
2022.06.26 -
Mac에서 명령어로 Win11 부팅 USB 만들기
Mac에서 명령어로 Win11 부팅 USB 만들기
2022.06.09