원문 https://darrenderidder.github.io/talks/ModulePatterns/ 요약
Node.js Module Patterns
이것은 같단한 모듈을 hello-module.js 소스에 선언한 것이다.
1  | // hello-module.js  | 
선언된 소스는 require() 로 들여올 수 있다:
1  | require("hello-module.js");  | 
Define a global
모듈 foo.js 를 글로벌
1  | // foo.js  | 
모듈 foo.js를 들여와 전역에 선언된 함수 foo()를 사용한다.
1  | require("foo.js");  | 
그러나 글로벌 영역을 오염 시키지 않는다.
export an anonymous function
module 객체에 export 한다.
1  | // bar.js  | 
모듈 bar.js를 들여와 전역에 선언된 함수 foo()를 사용한다.
1  | var bar = require("./bar.js");  | 
export a named function
module 객체의 이름 속성으로 export 한다.
1  | // bar.js  | 
모듈 bar.js를 들여와 전역에 선언된 함수 foo()를 사용한다.
1  | var fiz = require("./fiz.js").fiz;  | 
export an anonymous object
1  | // buz.js  | 
모듈 buz.js를 들여와 객체의 메서드를 호출한다.
1  | var buz = require("./buz");  | 
export a named object
1  | // buz.js  | 
모듈 baz.js를 들여와 속성 메서드를 호출한다.
1  | var baz = require("./baz.js").Baz;  | 
export an anonymous prototype
module.exports 에 객체를 노출한다.
1  | // doo.js  | 
모듈 doo.js를 들여와 객체의 메서드를 호출한다.
1  | var Doo = require("./doo.js");  | 
export a named prototype
module 에 이름 속성을 노출한다.
1  | // qux.js  | 
모듈 qux.js를 들여와 객체의 메서드를 호출한다.
1  | var Qux = require("./qux.js").Qux;  | 
module.exports
modules.exports는 exports로 가명을 가지고 있다. 이름 있는 속성을 사용할 때 아래 같이 선언한다.
1  | > module.exports.fiz = 'Fiz';  | 
exports 에 직접 대입하면 exports alias를 덮어 쓰게 된다.
1  | > module.exports.qux = "qux";  | 
pros, cons
- Named exports: 한 모듈에 여러 개체 및 속성을 노출할 수 있다.
 - Anonymouse exports: 간단한 클라이언트 인터페이스로 적합