전체를 이루는 부품 하나하나 (node.js에서는 javascript파일 하나를 모듈 하나라고 생각하면 편하다.)
이런 모듈이 모여서 하나의 프로그램이 되기 때문에 하나의 모듈에서 다른 모듈에 있는 기능을 가져다 쓰는 법을 아는 것이 중요하다.
<math-tools.js >
function add(x,y){
return x+y;
}
math-tools.js파일에 add라는 함수가 존재하고 나는 이 add라는 함수를 다른 js파일에서 사용하고 싶다.
이러 상황에서 다른 파일에서 add함수를 사용하기 위해선 먼저 math-tools모듈을 가져와야 하는데 이때 모듈을 가져오는것을 모듈을 로드한다라고 말한다.
이렇게 다른 모듈을 특정 모듈에서 로드할 때는 require이라는 함수를 사용한다.
그래서 실제로 main.js파일에서 require함수를 통해 math-tools.js 모듈을 로드해줄 수 있다.
<main.js>
const mathTool = require('./math-tools.js');
console.log(mathTool.add(1,2))
그런데 이렇게만 하면 올바르게 모듈이 로드 되지 않는다. 자신이 로드 되는 입장에 있는 math-tool.js에서도 특정한 조취를 취해야 한다.
특정 기능을 외부 모듈에서 쓰기 위해 특정 기능이 있는 모듈에서 그 기능을 외부로 공개해야한다. 그때 쓰는 키워드가 exports이다.
<math-tools.js >
function add(x,y){
return x+y;
}
exports.add = add;
//exports.모듈 외부로 공개할 이름= 모듈 내부에서 사용하고 있는 이름
이런식으로 적어야 add함수가 모듈 외부로 공개가 된다.
함수 뿐만 아니라 다양한 것들을 외부 모듈에 공개할 수 있고 또 만약 외부에 공개하고 싶은 것들이 여러개 라면 단순히 exports를 많이 써주는 것보다 한번에 모아서 외부 모듈에 공개할 수 있다.
<math-tools.js >
let calculator = {
PI:3.14,
add:(a,b) => a+b,
subtract:(a,b) => a-b,
}
module.exports = calculator;
여기서 알 수 있는 것은
exports -> 모듈 안에 있는 것들을 하나씩 공개
module.exports -> 공개하고 싶은 것들을 모은 객체를 외부에 공개