const data1 = "This is data1"
const data2 = "This is data2"module.exports { data1, data2}
const {data1, data2} = require("해당 파일 경로")
구조 분행 할당을 할 경우 위와 같이 변수명이 같아야 하지만 그게 아닌 경우 같지 않아도 된다.
한가지만 exports 하고 싶을 때는 module.exports를 사용하고
두개 이상을 exports 하고 싶은 경우는
exports.data1 = data1;
exports.data2 = data2;
또는
module.exports = {
data1,
data2
}
exports.data1 = data1;
exports.data2 = data2;
module.exports={}; 해버리면 위에 참조관계가 끊켜서 위에 것들이 무시된다.
이 둘은 같이 사용할 수 없다.
최상위 스코프의 this는 module.exports를 가리킨다.
그 외에는 브라우저의 자바스크립트와 동일하다 (브라우저에서 window면 node에서는 global)
함수 선언문 내부의 this는 global(전역) 객체를 가리킴

그러므로
const data1 = "data1";
const data2 = "data2";
exports.data1 = data1;
exports.data2 = data2;
const data1 = "data1";
const data2 = "data2";
this.data1 = data1;
this.data2 = data2;
이렇게도 가능하다.

require.main을 console.log로 찍어보면 어떤 파일을 실행했는지 알아낼 수 있다.
require.cache는 한번 require 된 파일들을 캐시에 저장해두고 불러오기 때문에 빠르다.