[Node.JS] npm 광역설치 시 모듈을 못 찾는 문제
npm으로 Node.JS용 모둘을 광역 설치(-g) 했을 때 모듈을 못 찾는 경우가 있다. 내 경우 homebrew로 Node.JS를 설치한 상태에서 기본적인 방법으로 npm을 설치한 상태였는데 -g 옵션으로 설치한 모듈을 전혀 읽지 못 하였다.
아래 에러 로그는
그렇다면 단순히 해결을 위해서는 node_modules의 내용을 node로 몽땅 복사해 주면 될 것이다. 하지만 이렇게 해 버리면 npm으로 모듈을 새로 설치할 때 마다 복사해 줘야 하는 수고가 발생한다.
따라서 효율적으로 문제을 해결하기 위해서는 node_modules를 node로 링크를 걸어주면 될 것이다.
우선 링크를 걸기 전에
추신) 이 해결법에서 경로 등의 정보는 Node.JS의 버전이나 설치된 환경에 따라 달라질 수 있다.
아래 에러 로그는
npm install -g express jade
명령으로 express와 jade를 광역설치한 상태에서 해당 모듈을 사용하는 스크립트를 구동했을 때 찍히는 에러로그이다.node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Cannot find module 'express' at Function._resolveFilename (module.js:322:11) at Function._load (module.js:267:25) at require (module.js:351:19) at Object.<anonymous> (/Users/hirenn/Devel/tmp/test.js:1:77) at Module._compile (module.js:407:26) at Object..js (module.js:413:10) at Module.load (module.js:339:31) at Function._load (module.js:298:12) at Array.<anonymous> (module.js:426:10) at EventEmitter._tickCallback (node.js:126:26)문제의 원인은 모듈이 설치되는 디렉토리에 있다.
- npm으로 설치한 모듈은
/usr/local/lib/node_modules
에 설치된다. - 하지만 Node.JS는 모듈을
/usr/local/lib/node
에서 찾는다.
그렇다면 단순히 해결을 위해서는 node_modules의 내용을 node로 몽땅 복사해 주면 될 것이다. 하지만 이렇게 해 버리면 npm으로 모듈을 새로 설치할 때 마다 복사해 줘야 하는 수고가 발생한다.
따라서 효율적으로 문제을 해결하기 위해서는 node_modules를 node로 링크를 걸어주면 될 것이다.
우선 링크를 걸기 전에
/usr/local/lib/node
디렉토리의 내용을 살펴보니 wafadmin 라는 심볼릭 링크가 하나 걸려 있었다. 그래서 이 링크를 node_modules에도 동일하게 걸어준다.$ cd /usr/local/lib/node $ ls -al total 8 drwxr-xr-x 3 user group 102 5 24 12:33 ./ drwxr-xr-x 32 user group 1088 8 5 14:48 ../ lrwxr-xr-x 1 user group 41 5 24 12:33 wafadmin@ -> ../../Cellar/node/0.4.8/lib/node/wafadmin $ ln -s ../../Cellar/node/0.4.8/lib/node/wafadmin /usr/local/lib/node_modules/그리고 기존 node디렉토리를 old.node로 변경하고(혹은 삭제하고) node_modules를 node로 링크를 걸어준다.
$ mv node old.node $ ln -s /usr/local/lib/node_modules node이 후 확인을 해 보니 모듈을 제대로 읽어들이게 되었다.
추신) 이 해결법에서 경로 등의 정보는 Node.JS의 버전이나 설치된 환경에 따라 달라질 수 있다.
댓글