// greet.js:
const greet = function () {
console.log('Hello World');
};
module.exports = greet;
// test.js:
const test = require('./greet');
console.log(test()); // Hello World
또는,
// greet.js:
const greet = function () {
console.log('Hello World');
};
module.exports = {
greet
};
// test.js:
const test = require('./greet');
console.log(test.greet()); // Hello World
// greet.js:
const greet = function () {
console.log('Hello World');
};
exports.greet = greet;
// test.js:
const test = require('./greet');
console.log(test.greet()); // Hello World
module은 exports 프로퍼티를 가지는 자바스크립트 객체이며 require()함수는 module.exports를 리턴한다.
var module = { exports: {} };
var exports = module.exports;
// your code
return module.exports;
exports는 module.exports를 call by reference 방식으로 참조하고 있기 때문에 exports를 새로운 값으로 할당하기보다는 프로퍼티 방식을 사용해야한다.
// 프로퍼티 방식
exports.hello = true; // Exported from require of module
// 직접 할당하는 방식은 X
exports = { hello: false }; // Not exported, only available in the module
참고하면 좋을 코드
(IIFE를 이용하여 자신만의 스코프를 감쌌기 때문에 exports를 새로 할당한다면 외부에서 참조가 불가능하다.
위의 내용은 모듈을 지원하게 된 이유를 참고하면서 이해가 되었다.)function require(/* ... */) { const module = { exports: {} }; ((module, exports) => { // Module code here. In this example, define a function. function someFunc() {} exports = someFunc; // At this point, exports is no longer a shortcut to module.exports, and // this module will still export an empty default object. module.exports = someFunc; // At this point, the module will now export someFunc, instead of the // default object. })(module, module.exports); return module.exports; }