본문 바로가기
NodeJS

[NodeJS] 모듈 만들기

by Yeoseungwon 2023. 6. 25.
728x90

노드는 코드를 모듈로 만들 수 있다는 점에서 브라우저의 자바스크립트와는 다르다. 

모듈이란? 

 - 특정한 기능을 하는 함수나 변수들의 집합 

 

노드에서는 두 가지 형식의 모듈을 사용함 

1. CommonJS 모듈

2. ECMAScript 모듈

 

CommonJS 모듈 알아보기 

1. 모듈이 될 파일과 모듈을 불러와서 사용할 파일이 필요함 

var.js 

junc.js

index.js 

같은 폴더에 만들기. 

var.js

const odd = 'CJS 홀수입니다.'
const even = 'CJS 짝수입니다.'

module.exports = { // 이 코드로 모듈로 만들어서 보내고 쓸수 있는듯 
    odd,
    even
}

module.exports 에 변수들을 담은 객체를 대입함 -> 이제 이 파일은 모듈로서 가능 

 

 

이제 var.js 를 참조하는 func.js 를 작성

func.js

const {odd, even} = require('./var'); 
//var.js 의 module.exports 보기

function checkOddOrEven(num){
    if(num % 2) { //홀수이면
        //JavaScript에서는 0을 거짓으로 처리하며, 0이 아닌 값은 참으로 처리합니다.
        return odd;
    }
    return even;
}

module.exports = checkOddOrEven;

require 함수 안에 불러올 모듈의 경로를 적어준다. 

const {odd, even} 은 구조 분해 할당 문법이다. 

 

 

마지막으로 index.js 작성

index.js

const {odd, even} = require('./var');
const checkNumber = require('./func');

function checkStringOddOrEven(str){
    if(str.length % 2) { //홀수이면
        return odd;
    }
    return even;
}

console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));

index.js 는 var.js와 func.js를 모두 참조한다. 

모듈로부터 값을 불러올 때 변수 이름을 다르게 지정할 수 있다. func.js의 checkOddOrEven이 checkNumber라는 이름으로 사용 되고 있다. 

 

 

index.js 실행결과

 

 

지금까지 모듈을 만들 때 module.exports 만 사용했는데, module 객체 말고 exports 객체로도 모듈을 만들 수 있다. 

앞의 var.js 를 아래와 같이 수정하여도 index.js 에서 동일하게 불러올 수 있다. 

// const odd = 'CJS 홀수입니다.'
// const even = 'CJS 짝수입니다.'

// module.exports = { // 이 코드로 모듈로 만들어서 보내고 쓸수 있는듯 
//     odd,
//     even
// }

exports.odd = 'CJS 홀수입니다.'
exports.even = 'CJS 짝수입니다.'

module.exports로 한 번에 대입하는 대신, 각각의 변수를 exports 객체에 하나씩 넣었다. 

module.exports 와 exports 는 같은 객체를 참조하기 때문에 동일하게 동작한다. 

실제로 console.log(module.exports === exports) 를 하면 true 가 나옴.

728x90

'NodeJS' 카테고리의 다른 글

[NodeJS] http - 요청과 응답  (0) 2023.06.30
[NodeJS] 자주 발생하는 에러들  (0) 2023.06.29
[NodeJS] 예외 처리하기  (0) 2023.06.29
[NodeJS] REPL / JS파일 실행하기  (0) 2023.06.24
[Node.JS] 기초 개념  (0) 2023.06.04