서로 다른 버전의 node가 하나의 shell 안에서 경쟁하는 구도가 되었다는 점이다. 여러 수단으로 node를 설치했음에도 아무 문제가 없는 분은 이쯤에서 뒤로가기를 살포시 눌러도 무방하나, 그렇지 않은 경우 아래의 방법에 따를 것을 강력히 추천한다.

(아래 내용은 본론만 소개하자니 어딘가 허전한 느낌이 들어 마구 휘갈긴 글로, 급하신 분들은 문장 건너뛰고 본론 파트로 넘어가시기 바랍니다.)


경험담

mac에서는 node를 설치하는 경로가 참 다양하다. nodejs.org에서 pkg파일을 받아 직접 설치할 수도 있고, brew를 이용할 수도 있으며, nvm, n 등의 버전관리툴을 이용할 수도 있다. 그밖에 필자가 모르는 다른 수단도 상당히 존재할 것이리라 예상한다.

문제는 MacOS가 불친절하다는 점이다. pkg로 설치한 node조차 삭제하려면 shell에서 여기저기 경로를 찾아다녀야 한다. 설상가상으로 요세미티부터는 sudo 명령으로도 node를 설치할 수 없는 경로가 발생하게 되었다! 이에 따라 nodejs 설치 수단을 제공하던 툴들은 제각각 별개의 경로에 node를 설치하기 시작해버렸다. 필자는 MacOS를 사용한지 얼마 되지 않아 이런 사실을 모른 채 그저 위에 언급한 여러 툴이 제공하는 명령어들을 마구 남발하며 무차별로 node 설치를 시도했던 적이 있다. 그러다 개인적으로 가장 잘 맞는 것 같은 툴을 선택하여 이후로는 해당 툴로만 node를 사용(했다고 착각)하며 지냈다.

그러다가 최근 npm 3.10.8 버전이 오류가 있는 것 같아 downgrade하려는데 자꾸 충돌이 나길래 홧김에 npm 자체를 지워버리고 다시 설치하고자 했다. 재설치가 안되길래 맥을 재시동하고 npm -v를 찍어보니 2.x.x를 출력하였고, 다시 sudo npm i -g npm을 날려보아도 설치된 척만 하고 제대로 인식이 안되었다. 이 문제를 해결하고자 열심히 구글링하여 얻어낸 결과를 공유드리고자 한다.


본론

구글링하고 시도하고 구글링하고 시도하기를 반복하다가 찾은 최고의 솔루션은 바로 이것이다.

https://gist.github.com/TonyMtz/d75101d9bdf764c890ef

영어 울렁증인 분들을 위해 아래에 번역 내용을 적어보겠다. 사실 번역이랄 것도 없긴 하지만, 그래도 중간중간 내용을 보충한 부분도 있으니 원문보다는 조금 더 참고가 될 것이다.

1. Mac에서 node.js를 두번다시 쓰지 않을 경우라면 이 단계를 먼저 거치자. 혹은 기존에 global로 설치한 npm 패키지가 무엇이 있는지 기억하지 못하는 경우에도 이 단계를 실행하자(npm 패키지들의 global 설치는 나중에 다시 하면 된다).

1
2
3
npm config get prefix
cd [ 위 명령으로 나온 경로. ex) /Users/gomugom/.npm-packages ]
cd lib && rm -rf node_modules

2. shell을 열어 아무 경로에서나 다음 두 줄을 복붙하자.

1
2
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom | while read f; do sudo rm /usr/local/${f}; done
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*

오류가 날 경우 다음도 시도해보자.

1
2
lsbom -f -l -s -pf /var/db/receipts/org.node.pkg.bom | while read f; do sudo rm /usr/local/${f}; done
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.node.*

엘 캐피탄 이상에서는 이렇게 해야 될 수도 있다.

1
2
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.node.pkg.bom | while read f; do sudo rm /usr/local/${f}; done
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*

그래도 안된다면 그냥 다음 단계로 넘어가면 된다.

3. /usr/local/lib 경로의 node로 시작하는 모든 것(node, node_modules 등)을 삭제한다.

1
cd /usr/local/lib && sudo rm -rf node*

4. /usr/local/include 경로의 node로 시작하는 모든 것(node, node_modules 등)을 삭제한다.

1
cd /usr/local/include && sudo rm -rf node*

혹시라도 brew로 node를 설치해놓고 기억을 못하고 있을 수도 있으니, brew로는 node를 설치하지 않았음이 확실치 않다면 그냥 아래도 돌려보자.

1
brew uninstall node

/usr/local/bin 경로 내의 node 및 npm을 삭제한다.

1
2
3
cd /usr/local/bin
sudo rm -rf npm
sudo rm -rf node

혹시 모르니 아래도 한 번씩 돌려주면 좋다.

1
2
3
sudo rm -rf /usr/local/share/man/man1/node.1
sudo rm -rf /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm

이걸로 끝이다. 이제 다시 각자의 입맛에 맞는 툴로 node를 설치하여 충돌없는 노드세상을 만끽하자!

brew

brew로 설치한 분들 중에 여전히 오류가 지속된다면 아래 링크를 참고하자.

https://gist.github.com/DanHerbert/9520689