Mac OS X Homebrew로 NodeJS를 설치했을 때, NPM package오류 해결 방법

Mac OS X Homebrew로 NodeJS를 설치했을 때, NPM package오류 해결 방법


문제의 원인은 npm은 스스로 upgrade를 하기 때문에 발생되는 것으로 판단된다.

즉, Homebrew가 설치해준 위치에서 "npm update npm"하는 순간 위치가 틀려져, 이전에 설치했던 package의 위치가 다 달라져서 발생하는 문제이다.

이전에 설치한 경우까지 포함한 해결 방법은 아래와 같다.
(https://gist.github.com/DanHerbert/9520689#gistcomment-1562962)

#0 이전에 설치한 적이 있는 경우, 아니면 #1부터
$ ls -1 /usr/local/lib/node_modules > ~/node_modules.txt
$ sed -e "s,/\+$,," -e "s,^/\+,," ~/node_modules.txt
$ rm -rf /usr/local/lib/node_modules
$ brew uninstall node --force node
#1 Homebrew v1.x에 한함
$ brew install node --without-npm
$ echo prefix=/Users/keiches/.npm-packages >> ~/.npmrc
# 주의! '~'와 같은 상대 주소를 사용하면, 추후 설치가 안된다. 절대 path를 입력해줘야 안전하다.
$ curl -L https://www.npmjs.com/install.sh | sh
$ echo 'export PATH="$HOME/.npm-packages/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
#2 이전에 설치한 적이 있는 경우, 아니면 건너띈다.
for i in `cat ~/node_modules.txt`; do npm install -g $i; done
$ rm ~/node_modules.txt


그런데 문제가 있을 수 있다.
간혹, 추가로 설정한 package를 못찾는 문제가 있다.

NPM은 package를 설치하면 기본적으로 "/usr/local/bin"에 "../lib/node_modules/bower/bin/bower"의 symbolic link를 생성하기 때문이다.

즉,

$ cd /usr/local/bin
$ ls -la bower
lrwxr-xr-x 1 keiches admin 35 4 27 10:47 bower -> ../lib/node_modules/bower/bin/bower

와 같이 생성하기 때문이다.
$ npm install -g bower
$ bower --version
-bash: bower: command not found

그래서 해결책은,

$ cd /usr/local/bin
$ sudo ln -sf ~/.npm-packages/lib/node_modules ../lib/node_modules
$ sudo ln -sf ../lib/node_modules node_modules
$ bower --version
1.7.9

주의할 점은, "~/.npm-packages"는 자신이 그 위치를 변경했다면 그에 맞게 바꿔줘야 한다.

Homebrew v2.x에서, Node를 NPM 없이 설치하기

댓글

이 블로그의 인기 게시물

Next.js에서 자연스러운 Page Transition 방법

[flutter] Android - Package간 sdk version 등이 맞지 않아 오류가 발생하는 경우

[Windows] Chocolatey upgrade