제로베이스
Node.js - 모듈 본문
모듈의 확장자인 .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 |