2013 이전/node.js

[node.js] npm을 이용한 module 설치

하구루 2017. 2. 25. 16:30

node.js 가 최근 많은 각광을 받는 이유 중 가장 큰 이유가 바로 강력한 추가 module들 때문이다.

 

 위 주소 공식사이트를 가보면 알겟지만 현재 18,333개의 모듈들이 들록되어 있다. 게다가 빠른속도록 추가되고 있고, 업데이트도 활발이 이루어 지고 있다. 모듈을 설치하고 사용하는 법은 매우 간단하다.
 node.js 를 설치할때 같이 설치된 npm을 이용하면 간단히 사용 할 수 있다. npm 은 간단한 명령으로 등록된 module을 쉽게 install 하고 update 할 수 있다.
 Mac 의 Mac port 나 Linux 의 apt-get 등의 package 관리 툴들을 이용해 보았다면 낯설지 않게 이용할수 있을것이다.

$npm install socket.io

 위와 같은 명령으로 간단하게 socket.io 를 설치 할 수 있다.
 기본 설치 위치가 /usr/local 으로 되어 permission 문제 때문에 설치가 제대로 이루어 지지 않을 수도 있으니 sudo 를 통해서 하기를 권장한다.

이외에 해당 module을 최신화를 위해 아래와 같이 update 명령을 이용하면 된다.

$npm update socket.io

이외에도 여러 명렁을 통해서 npm을 컨트롤 할 수있다  이들에 대해서는

$npm

위 처럼 command 없이 입력하면 이용가능한 명령어들을 볼 수 있다.
//socket_io.js
var socket = require("socket.io");

socket.listen(8005);

socket.sockets.on('connections', function(socket) {

        socket.emit('news', {hello:'world'});

});

socket.sockets.on('my event', function(data) {
        console.log(data);
});
설치한 module 은 위처럼 require 를 통해서 사용할 수 있다.
위 예제에서는 나중에 socket.io에 대해서 다룰때 다시한번 언급 해보도록 하겠다.

하지만 이대로 소스를 실행하명 다음과 같은 에러를 보게 될것이다.

module.js:337
    throw new Error("Cannot find module '" + request + "'");
          ^
Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:337:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:359:17)
    at require (module.js:375:17)
    at Object.<anonymous> (/Users/gwanlija/socket_io/socket_io.js:1:76)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Array.0 (module.js:484:10)

 해당 module 이 없다는 것인데, 방금 설치 했는데 없다니.. 무슨일일까? 바로 디렉토리 문제이다.
 해당 module이 설치된 디렉토리에서 소스를 저장하고 실행해야 해당 module 못찾는다는 위와 같은 에러가 나타나지 않는다. 일반적인 경우라면 /usr/local/lib 의 하위 디렉토리에서 가능하다.
 그런데.. 이렇게만 가능하다면 찝찝할 수 밖에 없다. 내가 원하는 디렉토리에서 실행이 불가능 한걸까?
 방법은 있다 해당하는 module 들을 소스가 들어 있는 디렉토리에 포함시켜야 한다. 이를 간단하게 해주는 것이 바로 package.json 파일이다. 해당 파일은 module 패키지에 대한 여러 정보를 정리 한 파일이다.

자세한 사항은 아래 링크를 확인 하기 바란다.


일단 여기서는 위에서 발생하는 문제의 해결에 필요한 것만 초점을 맞추도록 하겠다.
//package.json
{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "socket.io": "0.9.11"
  }
}
위와 같은  구조로 되어 있다. 윗부분은 보는것처럼 간단한 application 에 대한 정보를 기록한다.

그리고 주목하야 할것이 "dependencies" 항목이다.

socket.io 에 의존하고 있다고 명시하고 있다.
json 문법대로 키 벨류 쌍으로 이용하는 module을 필요하다면 추가로 명시해주면 된다.
이 파일을 소스가 들어 있는 디렉토리에 저장하면 된다.

그리고 해당 디렉토리에서

$npm install

위 처럼 입력하고 수행하면 package.json 의 "dependencies" 에 명시되어 있는 module을 해당 디렉토리에 설치가 되어 진다.
설치가 끝나고 다시한번 소스를 수행해 보면 문제 없이 수행되는것을 확인 할 수 있을 것이다.


반응형