원문 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: 간단한 클라이언트 인터페이스로 적합