part02. 모듈화 & CommonJS module system

holang-i·2021년 4월 7일
0

JavaScript

목록 보기
23/25
post-thumbnail

ES6문법 & 모듈화 & node.js에서 사용하는 CommonJS 공부

ComminJS 도입 배경

1.node.js에서 사용하는 require문법, module.exports, exports
2.모듈이 어떠한 방식으로 불려지는지 알아보기


모듈 사용하기

브라우저와 node.js에서의 모듈 사용의 차이

브라우저와는 다르게 node.js의 특징 중 하나는 다양한 내장 모듈이 존재한다는 점이다.
그렇기 때문에 여러 내장 모듈들을 가져와서 사용할 줄 알아야 된다.

기존에 브라우저에서 다른 script 파일을 불러올 때, html 파일에서 <script> 태그를 사용해서 여러 js파일들을 다뤘었는데 node.js에서는 html이 존재하지 않기 때문에 JavaScript 파일에서 다른 스크립트 파일, 모듈에 접근하려면 다른 방법으로 접근을 해야 된다.


기본적인 사용방법

npm install 을 사용해서 필요한 모듈을 npm 저장소에서 다운받아서 사용할 수 있고, 다운 받은 모듈은 node_modules에 저장된다.

그리고 저장 된 모듈을 사용하기 위해서는 아래와 같은 방법으로 모듈을 사용할 수 있다.

const 해당 모듈이 담긴 변수 = require('해당 모듈 이름')

다양한 모듈들이 있는데 그중 파일시스템에 관련된 모듈을 한 번 가져와 볼 것이다.

const fs = require('fs');

다른 스크립트를 불러오는 방법

다른 스크립트를 불러오기 위해서는 require 구문을 사용해야된다.
모듈이라는 것도 결국에는 다른 스크립트이다.

동일한 디렉토리안에 파일 2개가 있다고 가정하고, 스크립트 파일 2개를 작성해 볼 것이다.

script1.js

const module2 = require('./script2.js'); // ./는 현재 디렉토리

script2.js

console.log(`this is module 2!!!`);

위의 코드를 살펴보면, script1.js 에서 require 구문을 통해 script2.js 파일을 불러오고 있다.

그럼, script1.js에서 module2에는 어떤 값이 들어갈까?
modele2로 어떤 값을 받기 위해서는 script2.js 파일에서 반환해주는 작업이 필요하다.


모듈로 노출시키는 방법

모듈의 핵심은 모듈을 만들어서 밖으로 내보내는 것이다.
그리고, 그 모듈을 가져다 사용할 수 있도록 만들어야 된다.

모듈로 노출을 시키기 위해서는 module.exports 를 사용해야된다.

module.exports는 다른 스크립트 파일들에서 내가 만든 모듈을 사용할 수 있게 노출시키는 방법이다!

아래에 위의 코드에서 script2.js의 내용을 노출시켜서 반환해 볼 것이다.

script1.js

const module2 = require('./script2.js');
console.log(module2); // `this is module 2!!!`

script2.js

module.exports = `this is module 2!!!`;

위의 코드에서 module.exports 대신에 exports 를 사용할 수도 있다.
exports는 일종의 축약형(shortcut)이고, module.exports 를 참조한다.
이렇게 모듈을 노출하는 방법과 불러오는 방법을 CommonJS 모듈 시스템 이라고 부른다.


[node.js 공식 문서 참고 링크: Cycles]
https://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_cycles

[node.js 공식 문서 참고 링크: module.exports]
https://nodejs.org/dist/latest-v14.x/docs/api/modules.html#modules_module_exports


외부 스크립트를 require 구문을 이용하여 두 번 불러올 경우, 외부 스크립트는 두 번 실행될까? 한 번 실행될까?

정답: 한 번만 실행된다!


CommonJS

commonJS는 모듈과 관련이 있다.

모듈의 핵심은 모듈을 만들어서 밖으로 내보내는 것이고, 다른 곳에서 그 모듈을 가져다 사용할 수 있도록 만들어야 된다.

- 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 된다.
- 모듈 정의는 전역객체인 exports 객체를 이용한다.
- 모듈 사용은 require 함수를 이용한다.






profile
🌿 주니어 프론트엔드 개발자입니다! 부족하거나 잘못된 정보가 있다면 알려주세요:)

0개의 댓글