TIL - Node.js Module Structure

Heechul Yoon·2020년 6월 8일
0

LOG

목록 보기
54/62

Node.js 모듈 종류

Node.js 는 크게 3가지를 제공한다

  • fs(file system) : 파일을 읽고 쓰는것
  • http : 네트워크
  • os : 운영체제

코어 모듈

  • 바이너리로 컴파일 되어야 하는 모듈이다
  • lib/ 폴더에 위치한다

node_modules 폴더에 있는 모듈

  • node에서 제공되는 기본 모듈
  • npm install을 통해서 받은 모듈

Global 객체

대표적인 node_modules에 있는 전역 객체로 모든 파일에서 접근 가능하다

  • 원하는 값을 프린트 할 때 사용하는 console 함수도 글로벌객체 안에서 존재한다
  • global 객체는모든 파일에서 접근이 가능하기 때문에 'global'을 생략하고 소속된 함수를 사용 가능하다
    const global = require('global')

    global.console.log('hi')
    console.log('hi2')

사용자 정의 모듈

  • module.exports 변수를 정의하는 것을 통해 현재 파일에 있는 변수 또는 함수를 import 해서 사용할 수 있도록 한다
// tt.js
function third() {
    console.log('func in tt.js')
}
const first = 'var 1 in tt.js';
const second = 'var 2 in tt.js';

module.exports = {
    first,
    second,
    third
};
// test2.js
tt = require('./tt.js')

tt.third()
  • export되어진 모듈은 다른 파일에서 require을 통해서 사용가능하다
Module {
  id: '.',
  path: '/home/heechul/testnode',
  exports: {},
  parent: null,
  filename: '/home/heechul/testnode/test2.js',
  loaded: false,
  children: [
    Module {
      id: '/home/heechul/testnode/test.js',
      path: '/home/heechul/testnode',
      exports: [Object],
      parent: [Circular],
      filename: '/home/heechul/testnode/test.js',
      loaded: true,
      children: [Array],
      paths: [Array]
    },
    Module {
      id: '/home/heechul/testnode/tt.js',
      path: '/home/heechul/testnode',
      exports: [Object],
      parent: [Module],
      filename: '/home/heechul/testnode/tt.js',
      loaded: true,
      children: [],
      paths: [Array]
    }
  ],
  paths: [
    '/home/heechul/testnode/node_modules',
    '/home/heechul/node_modules',
    '/home/node_modules',
    '/node_modules'
  ]
}
  • test2.js에서 module의 console.log를 보면 require되어진 모듈들이 children에 들어감을 확인할 수 있다

module.exports 와 exports

모듈을 export해서 전역으로 사용하기 위해서는 module.export를 해주었다. 하지만 exports라는 객체를 사용하여서도 같은 작업이 가능하다

// tt.js
function third() {
    console.log('func in tt.js')
}
const first = 'var 1 in tt.js';
const second = 'var 2 in tt.js';

module.exports = {           [1]
    first,
    second,
    third
};

exports.first = first;       [2]
exports.second = second;     
exports.third = thrid

[1]과 [2]모두 변수화 함수를 export하는 같은 역할을 수행한다

console.log(module.exports === exports)

위와같이 모듈객체 안에있는 exports와 exports객체가 같은지 확인해보면 'True'가 나온다.

이를 통해서 두개의 exports가 같은 객체를 참조하고 있다고 추측할 수 있다.

profile
Quit talking, Begin doing

0개의 댓글