-
[Nodejs] module.export, export 의 차이점Node.js 2019. 5. 9. 19:27
nodejs에서 분리된 소스파일을 별도의 모듈처럼 사용할 수 있다. 일단 모듈을 생성하는 방법에는 두가지가 있다. 직접 exports 객체에 프로퍼티를 할당하는방법, module.exports 에 객체를 할당하는 방법 일단 두가지가 있다고 이해하고 넘어가자
1. export = export는 단순히 module.exports 를 참조할 뿐이다. 짧은 alias로 생각하면된다. module.exports 외 exports는 같은 객체를 참조 있으며 리턴은 항상 module.exports 이다.
결국에 같은거 아니야? 라고 생각할 수 도 있다. 생각이 아니라 같다라고하는 말도 맞다. 그래서 어떻게 사용해야되는지가 문제이다. 사용방법의 목적따라 다르다
2. module.exports
sss.js 파일
var calc = {};
calc.add = function(a, b){
return a + b;
}
calc.multiply = function(a, b){
return a * b;
}
module.exports = calc; 가능 or exports = calc; 불가능ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
main.js 파일
var calc = require('./sss');
console.log(calc.add(3, 5));**위의 export의 실패 이유로는 일단 calc.add is not a function 출력, Node가 모듈을 처리할 때, exports를 일반변수로 인식, 그래서 exports에 객체를 할당해 버리면 exports를 모듈시스템에서 처리할 수 있는 전역변수가 아닌 일반 변수로 인식하여 실패한다. 추가로 calc를 객체를 정의한 sss.js 파일의 var calc = {}; 주석처리하게 되면 main.js에서 var calc =require('./sss') calc is not defined 출력되면서 ./sss 파일에 접근조차도 못한다. 이것은 require라는 모듈이 결국에 module.exports(객체) 리턴하고 사용하기때문에 exports = calc 하면 에러가난다. (calc를 일반변수로 인식)
'Node.js' 카테고리의 다른 글
[Nodejs] Winston모듈이용하여 로그파일 생성 및 설정, httpd로그도 파일에 저장되게하기 (0) 2019.05.14 [Nodejs] winston모듈 사용하여 관련로그 파일로 만들기 (0) 2019.05.10