자바스크립트 코드가 실행되려면 다른 스크립트가 먼저 로딩되어야 한다거나 하는 경우가 있는데, 자칫 스크립트 로딩의 순서가 꼬일 경우 에러를 뱉어내며 동작하지 않을 수 있다.
(function(exports) { "use strict"; // private 변수 var name = "I'am a module"; // 외부에 공개할 public 객체 var pub = {}; pub.getName() { return name; } // 외부 공개 exports.aModule = pub; })(exports || global); (exports || global).aModule.getName(); // I'm a module이러한 구현은 변수를 private 화 할 수 있으며 그로 인한 캡슐화로 모듈 사용이 쉬운 장점이 있지만, 여러개의 모듈을 선언하면서 exports 객체에 프로퍼티가 겹칠 경우 앞서 선언된 공개 속성은 덮어써지는 문제가 있고, 모듈간 의존성이 있을때 의존성을 정의하기가 매우 어렵다.
모듈은 그 모양과 크기가 여러 가지 있는데, 일반적인 목적은 하나같이 작업 환경에 불러오기만 하면 알아서 원래 가지고 있는 기능을 잘 수행하는 데 있습니다. 보통 모듈은 기본적으로 각각의 개발자 문서와 설치 과정 그리고 브라우저나 서버와 같은 실행 환경의 정보를 제공하고 있습니다.
이러한 모듈은 프로젝트에 필요한 기능을 메꿔주면서 나중에 추가와 제거와 같은 의존성 관리가 훨씬 간편해지는 효과가 있습니다. 모듈이 제공하는 장점과 유연성을 생각해보면, 이젠 어떤 덩치 큰 라이브러리를 단순하게 추가하는 일은 점점 줄어들 것입니다.
1 | var module = require( './mymodule' ); |
만약 위처럼 확장자를 입력하지 않으면 어떻게 될까요?
- 먼저 mymodule.js 파일을 찾습니다. 있다면 그 파일을 추출합니다.
- mymodule.js 파일이 없다면 mymodule 이라는 폴더를 찾습니다. 그리고 그 폴더의 index.js 파일을 찾아 추출합니다.
반응형
'javascript & jQuery' 카테고리의 다른 글
javascript 참고 사이트 (0) | 2016.08.16 |
---|---|
javascript this self 차이점 (1) | 2016.08.16 |
javascript와 jquery의 차이 (0) | 2016.08.11 |
javascript array의 function들 (0) | 2016.08.11 |
Object.keys() (0) | 2016.08.10 |