Skip to content

2014_NodeJS_Progamming_NodeModuleSystem

cecil1018 edited this page Sep 1, 2015 · 11 revisions

Learning Node Ch4 Modules

4장 node.js 모듈 시스템

개념

  • 모듈이란 class, package(java), namespace(c++)과 비슷하다고 생각하면 83% 먹고 들어간다.
  • 모듈은 하나의 파일 혹은 하나의 디렉토리
  • require는 import(java), include(c++)과 비슷하다고 생각하면 83% 먹고 들어간다.
  • CommonJS Module system을 따랐다고 합니다.

사용 예

var mymodule = require('./mymodule'); //상대경로
var mymodule = require('/home/myname/myapp/mymodule.js'); //절대경로
var http = require('http'); //코어모듈
  • 코어 모듈은 node_modules 폴더에서 가져온다.
  • require 한 다음 http.createServer(...) 이런 식으로 사용한다.

node.js는

  • v8 + 수 많은 module
  • 웹서버? 프레임워크?
  • 직접만든 간단한 웹 서버
var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

모듈을 만들어 보자

  • 외부 호출 항수는 export 명시
  • 변수는 모듈 private
  • 아까 그 웹 서버
var http = require("http");

function start() {
  function onRequest(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
}

exports.start = start;

/*
// 실행하려면
var server = require("./server");
server.start();
//*/ 

디렉토리 패키징

  • 디렉토리 하나가 하나의 모듈
  • 패키지 데스크립터(package.json) 제공 또는 진입점 파일(index.js)을 디렉토리에 포함

node package manager

  • 모듈 다운로드, 설치 등: 리눅스, 파이썬 등에서 사용하는 시스템
  • 세상의 모든 module을 모은 저장소가 있다.
  • 새 모듈을 설치 할 때는 저장소에서 다운 받는다.
  • https://www.npmjs.org/
  • 모듈 참 많다.

npm 사용

  • 도움말: npm help npm
  • 설치: npm install modulename
  • 의존관계 모듈까지 알아서 설치해주니 편리
  • 기타 여러 명령은 생략
  • 특정 버전 설치, 제거, 업데이트, 설치된 목록

유명 모듈

  • http: node.js의 존재 이유라고나 할까
  • socket.io: 소켓서버 만들 때
  • express: 나름 프레임워크, 요즘 누가 http 모듈을 생으로 쓰니?
  • request: HTTP request client
  • async: 안 그대로 비동긴데 더 비동기로
  • jade: jade 템플릿
  • underscore: js 유틸리티 함수 모음
  • connect: 미들웨어, 나름 유명한 듯
  • uglify-js: 압축, 예쁘게 코드 정리
  • 그 외
  • Coffee-script, Optimist, Colors, Redis, Mime, JSDOM

쓸만한데 한 챕터로 다루기엔 작은 모듈

underscore

  • 유틸리티
  • 관습적으로 var _ = require('underscore');로 사용해서 underscore 또는 var us = require('underscore');
  • 유틸리티
  • each: _.each(['apple','cherry'], function (fruit) { console.log(fruit); });
  • mixin: 기존 모듈에 함수 추가

colors

  • console.log()에 색과 스타일 추가
  • console.log('This Node kicks it!'.rainbow.underline);

optimist

  • 명령행 옵션 분석
//node ./app.js -o 1 -t 2

var argv = require('optimist').argv;
console.log(argv.o + " " + argv.t);

jsdom

  • html dom object
<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; margin:8px; }
  </style>
</head>
<body>
  <p id='test'>Test Paragraph.</p>
</body>
</html>
jsdom.env('./test.html',['http://code.jquery.com/jquery-1.7.1.min.js'], function(errors, window) {
  wind = window;
}); 
console.log(wind.$("#test").text());

조금은 어수선한 기타 정보

  • 모듈 확장자는 js, node, json
  • 모듈을 찾지 못 했다면 자동으로 여러 디렉토리를 뒤져본다.
  • 자세한 내용은 생략
  • 모듈 unload
  • delete require.cache['./circle.js');

###내가 만든 모듈 배포

  • 패키지 디스크립터(package descriptor)의 여러 필수 항목을 채운다.
  • 이름, 설명, 버전 등
  • npm init
  • 하위 디렉토리: examples, test, doc
  • npm install. -g, npm adduser, npm publish

Clone this wiki locally