NodeJS - Module Wrapper Function

YU NA Joe·2022년 8월 10일
0

Module wrapper function

Node.js가 모듈을 로드할 때는, 한 가지 해주는 작업
--> Module wrapper function'이라는 것으로 모듈 내의 전체 코드를 감싸주는 작업

Syntax, 아래처럼 생겼다.

(function (exports, require, module, __filename, __dirname) {
  // 모듈 코드
});
예를 들어, 
아래의 함수를
function add(a,b){
  return a + b; 
}
exports.add = add; 

아래처럼 감싸준다.
(function (exports, require, module, __filename, __dirname) {
  function add(a,b){
  return a + b; 
}
exports.add = add; 
});

Module wrapper function의 다섯 가지 인자

 function add(a, b) {
  return a + b;
}

exports.add = add;

console.log('exports ------------------------->');
console.dir(exports);
console.log('require ------------------------->');
console.dir(require);
console.log('module ------------------------->');
console.dir(module);
console.log('__filename ------------------------->');
console.dir(__filename);
console.log('__dirname ------------------------->');
console.dir(__dirname);

이 중에서, exports와 module만 좀 더 자세히 보장
exports ------------------------->
{ add: [Function: add] }

module ------------------------->
Module {
  id: '.',
  path: 'C:\\NodeJs\\기본개념',
  exports: { add: [Function: add] },
  filename: 'C:\\NodeJs\\기본개념\\module.js',
  loaded: false,
  children: [],
  paths: [
    'C:\\NodeJs\\기본개념\\node_modules',
    'C:\\NodeJs\\node_modules',
    'C:\\node_modules'
  ]
}

summary

exports 객체와 module 객체의 exports 프로퍼티가 가리키는 객체는 '동일한' 객체
모듈 내부의 것들을 외부로 공개하기 위해 exports나 module.exports를 썼던 것은 바로 이 객체에 접근하기 위함

모듈을 실행하는 script 에서 보면은
const m = require("./module.js")

require 함수는 'exports 객체(=module 객체의 exports 프로퍼티가 가리키는 객체)'를 리턴

0개의 댓글