노드 에선 모듈을 관리하는 방법중 하나이다.
(cf, 리액트에선 'import/export'가 그 기능을 담당한다.)
모든 모듈은 자신만의 독립적인 실행 영역이 있어야한다.
모듈의 정의는 전역객체는 exports 객체를 이용한다
모듈사용은 require 함수를 이용한다.
exports.foo = () =>{...};
exports.bar = () =>{...};
exports.foobar = () =>{...};
이런 함수를 아래와 같이 변형 할 수 있다.
<script>
var $ = require('jquery')
var foo = require('./js/foo');
var bar = require('./js/bar');
var foobar = require('./js/foobar');
</scrpit>
표현 방법이 2가지가 있어서 헷갈릴 수도 있다 .
exports.anything =function(){
console.log('I am anything')
}
module.exports.anything = function(){
console.log('I am anything')
}
사실 둘이 표기상 별차이는없다. exports가 숏컷 상태이다. 그렇다면 섞어 써도될것인가 ?
섞어쓰면 안된다.. exports 는 module.exports 를 참조한다. 만약 이미, module.exports를 쓰고있는 상태에서 exports를 쓰게된다면 무시될것이다.
exports 가 편리하고 좋지만, 섞어쓰거나
만약 exports 에 객체를 할당해 준다면, 그 내용을 require하여 다른 js 파일에서 임포트를 하게된다면 그 값을 가져오지 못한다. (빈객체만 가져옴)