제로베이스

Node.js - 모듈 본문

Node.js 기본기

Node.js - 모듈

코드킴 2023. 8. 29. 22:02

모듈의 확장자인 .js를 꼭 붙이지 않아도 된다.

 

main.js 모듈에서 math-tools.js 모듈을 로드할 때

let m = require('./math-tools.js')

이렇게 파일 이름 뒤에 붙은 .js라는 확장자까지 전부 적어줬는데 하지만 확장자 없이 그냥 파일 이름만 적어줘도 된다.

let m = require('./math-tools');

main.js 모듈을 이렇게 저장하고 그대로 실행해도 잘 실행이 된다. 

 

 

모듈의 경로를 정확하게 작성해야 한다.

 

main.js 모듈과 math-tools.js 모듈은 같은 디렉토리 안에 있다.

let m = require('./math-tools.js');

그래서 이렇게 ./ 기호로 main.js 모듈을 기준으로, 현재 디렉토리 안의 math-tools.js 모듈이라는 걸 나타낸다.

 

만약 math-tools.js 모듈의 위치가 다른 곳이라면, 경로 표시도 변경해줘야 한다. 예를 들어, math-tools.js 모듈이 main.js 파일이 있는 현재 디렉토리의 부모 디렉토리의 modules라는 디렉토리에 있다고 가정하면 아래와 같이 변경해줘야한다.

let m = require('../modules/math-tools.js');

..은 부모 디렉토리를 나타내는 상대 경로이다.

 

 

require 함수가 리턴하는 객체는 상수로 대입하는게 좋다.

let m = require('./math-tools.js');  // 변수

const m = require('./math-tools.js'); // 상수

모듈이 리턴한 객체를 변수로 받으면, 나중에 본인 또는 다른 개발자가 변수 m에 다른 값을 실수로 다시 지정하게 될 수도 있기 때문이다. 이경우, 그것 자체만으로는 에러가 발생하지 않지만 의도하지 않는 오류가 발생할 수 있다는 점에서 오히려 더 위험하다.

 

하지만 모듈이 리턴한 객체를 상수로 받으면 상수 m에 새로운 값을 다시 지정하려는 코드 자체에서 에러가 발생하기 때문에 잘못된 코드를 작성하는 것을 미리 방지할 수 있다.

 

 

모듈안의 모든 것들을 공개할 수 있다.

 

변수에서부터 객체까지, 모듈 안에 있는 것들은 모두 다른 모듈이 사용하도록 공개할 수 있다.

const PI = 3.14;
let author = 'code kim'

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

let test = {
  date: '2020-09-21',
  types: ['safetyTest', 'performanceTest'],
  printTypes() {
    for (const i in this.types) {
      console.log(this.types[i]);
     }
   }
 };
 
exports.PI = PI
exports.author = author
exports.add = add
exports.test = test

이렇게 원하는 모든 것들을 모듈 밖으로 공개할 수 있다.

'Node.js 기본기' 카테고리의 다른 글

네트워크 지식  (0) 2023.09.04
EventEmitter 객체  (0) 2023.09.04