이번 아티클에서는 모듈을 불러오는 데 사용한 require에 대해서 살펴보도록 하겠습니다. 기본적으로 require도 함수입니다. 함수는 객체이므로 require도 객체로서의 속성을 몇 가지 가지게 되겠죠. 일단, require.cache와 require.main에 대해서 살펴보도록 하겠습니다.
우선 앞선 아티클에서 작성했던 예제 파일 중, [var.js]가 있는 폴더에 [require.js]를 새로 생성해 보겠습니다.
// [var.js]
exports.odd = 'CJS 홀수';
exports.even = 'CJS 짝수';
/*
const odd = 'CJS 홀수';
const even = 'CJS 짝수';
module.exports = {
odd,
even,
};
*/
// [require.js]
console.log('require가 가장 위에 오지 않아도 괜찮다.');
module.exports = '나를 찾아봐';
require('./var');
console.log('*****require.cache입니다*****');
console.log(require.cache);
console.log('*****require.main입니다*****');
console.log(require.main === module);
console.log(require.main.filename);
/* 출력
require가 가장 위에 오지 않아도 괜찮다.
*****require.cache입니다*****
[Object: null prototype] {
'D:\\Study\\NodeJS\\CommonJS\\require.js': {
id: '.',
path: 'D:\\Study\\NodeJS\\CommonJS',
exports: '나를 찾아봐',
filename: 'D:\\Study\\NodeJS\\CommonJS\\require.js',
loaded: false,
children: [ [Object] ],
paths: [
'D:\\Study\\NodeJS\\CommonJS\\node_modules',
'D:\\Study\\NodeJS\\node_modules',
'D:\\Study\\node_modules',
'D:\\node_modules'
]
},
'D:\\Study\\NodeJS\\CommonJS\\var.js': {
id: 'D:\\Study\\NodeJS\\CommonJS\\var.js',
path: 'D:\\Study\\NodeJS\\CommonJS',
exports: { odd: 'CJS 홀수', even: 'CJS 짝수' },
filename: 'D:\\Study\\NodeJS\\CommonJS\\var.js',
loaded: true,
children: [],
paths: [
'D:\\Study\\NodeJS\\CommonJS\\node_modules',
'D:\\Study\\NodeJS\\node_modules',
'D:\\Study\\node_modules',
'D:\\node_modules'
]
}
}
*****require.main입니다*****
true
D:\Study\NodeJS\CommonJS\require.js
*/
출력 결과가 꽤 깁니다. 차근차근 살펴보겠습니다.
우선, require.main에 대해서 알아보죠. 일단, "require.main"은 노드 실행 시의 첫 모듈을 의미합니다. 자, 우리는 $node require를 실행했습니다. 그래서 간단하게 require.main은 [require.js]가 됩니다. 그래서 require.main.filename을 출력하면 예제에서처럼 [require.js]가 출력됩니다. 그리고 $node require를 실행했을 때 require.js 내부에서 require.main === module을 실행하면 true가 리턴됩니다. 만일 $node require를 실행한 상태에서 [var.js]에서 require.main === module을 실행하면 false가 출력되는 원리입니다.
그다음으로 require.cache에 대해서도 살펴보겠습니다. 일단, 출력 값이 굉장히 많아서 당황스러울 수 있습니다. 하지만 간단히 정의해 보면 각 파일의 모듈 객체가 저장되는 객체입니다. 한번 어떤 모듈을 require 하면 require.module 객체에 저장되는 것이죠. 그래서 다시 require 하는 경우에 새로 불러오지 않고 require.cache에 있는 정보를 재사용하게 됩니다 (이론적으로는 수동적으로 삭제가 가능하지만 권하지는 않습니다). 여기에는 exports한 내용이나 로딩 여부(loaded), 자식(children) 모듈 객체 등이 표시됩니다.
'Programming > Node.js' 카테고리의 다른 글
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : 다이나믹 임포트 (0) | 2024.03.22 |
---|---|
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : ECMAScript 1 (0) | 2024.03.21 |
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : CommonJS 4 (0) | 2024.03.19 |
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : CommonJS 3 (0) | 2024.03.16 |
4. Node 기능 살펴보기 (2) - 모듈 사용하기 : CommonJS 2 (0) | 2024.03.15 |