개인 노트 정리) Node.js 백엔드 part 1-5 require와 모듈, 모듈의 레졸루션

2023. 5. 25. 20:12개인노트-인강

한 번에 끝내는 Node.js 웹 프로그래밍 초격차 패키지 Online

 

# require와 모듈, 모듈의 레졸루션

- require란 모듈을 가져오는 방식.

- 모듈이란 Node의 모듈 시스템에서는 각 파일이 별개의 모듈로 취급이 됩니다.

- Node에서는 각 파일 하나하나가 모듈인 셈입니다.

- 그래서 그 모듈을 가져오는 함수가 require

 

## 참고

// 첫번째 줄 코드와 두번째 줄 코드는 동일한 함수입니다.
require('./animals');
module.require('./animals');

 

## module에 대해서

CommonJS 방식은 require 이란 키워드를 사용합니다.

ECMAScript 방식은 export, import 이란 키워드를 사용합니다.

 

### CommonJS 방식

// main.js
const { path, paths, filename} = module;

console.log({
  path,
  paths,
  filename,
});

// 출력결과
/*
{
  path: '/home/coder/project/src',
  paths: [
    '/home/coder/project/src/node_modules',
    '/home/coder/project/node_modules',
    '/home/coder/node_modules',
    '/home/node_modules',
    '/node_modules',
  ],
  filename: '/home/coder/project/src/main.js'
}
*/

- paths에 나오는 경로들은 require시에 절대 경로로 가져올 수 있는 모듈들의 위치입니다.

- 이렇게 절대경로를 지정하면 module.paths의 경로들을 순서대로 검사하여 해당 모듈이 있으면 가장 첫 번째 것을 가져옵니다.

 

 

### ECMAScript 방식

- mjs라는 확장자를 가진 파일을 만들어야 합니다. ( 예 : animals.mjs )

 

animals.mjs

const animals = ['dog', 'cat'];

export default animals

 

main.mjs

import animals from './animals.mjs'

console.log(animals);

 

## require 에 대해서

- animalsA 와 animalsB 와 animalsC는 전부 같은 객체입니다.

- require을 같은 파일에 대해 3번 호출했지만, 실제로는 한 번만 호출합니다.

const animalsA = require('./animals');
const animalsB = require('./animals');
const animalsC = require('./animals');

console.log(animalsA === animalsB); // true
console.log(animalsA === animalsC); // true