jquery | 2탄_AMD,CommonJS,UMD
플러그인을 만들려고 구글링 했더니, 계속 나오는 용어 AMD, CommonJS, UMD 플러그인이나 모듈같은 것은 다른사람의 코드나, 나의 코드를 재사용하고 싶을 때 사용한다.
-
처음 자바스크립트는 모듈을 가져오거나, 내보내는 방법이 없어 하나의 파일에 모든 기능이 들어가야 했다.AMD, CommonJS, UMD가 등장한 이 후 모듈화 개발을 할 수 있게 되었다.
-
여러 모듈을 불러온 경우, 각 모듈에서 같은 변수를 사용할 때 변수 충돌이 일어나는데, 이 충돌 문제를 해결하기 위한 방법으로 AMD, CommonJS, UMD… 이 있다.
즉, 모듈화 개발을 하거나, 변수 충돌 문제를 해결하기 위해 사용하는 방식이다.
AMD(Asynchronous Module Definition)
define(['jquery'], function($){
console.log($);
return {
jquery: $
}
})
AMD는 비동기 상황에서 자바스크립트 모듈을 사용하기 위함이다.
AMD는 브라우저를 중점을 두어, 네트워크 모듈들을 다 내려받은 후 비동기적으로 동작하므로, 클라이언트 사이드 개발에 적합하다.
AMD 모듈 방식을 채택하기 위해서는 이를 구현한 가장 유명한 RequireJS 스크립트를 다운로드받아 스크립트를 불러와야 한다.
CommonJS
const $ = require('jquery');
module.exports = {
$ : $
}
CommonJS는 모든 파일이 로컬 디스크에 있어 필요할 때 바로 불러올 수 있는 상황을 전제로 한다.
동기적인 동작이 가능한 서버사이드 자바스크립트 환경을 전제로 하며 Node.js에서 채택한 방식이다.
기본적으로 CommonJS 모듈 방식을 채택하기 위해서는 webpack등의 처리가 필요하다.
UMD
(function(root, factory) {
if(typeof define === 'function' && define.amd) { // AMD 여부 확인
define(['jquery'], factory)
}
else if(typeof exports === 'object' && module.exports) { // CommonJS 여부 확인
module.exports = factory(require('jquery'));
}
else {
root.myModule = factory(root.$);
}
}(this, function($){
retrun x : $
}));
UMD는 모듈 방식이라기보다 디자인 패턴에 가깝다.
AMD, CommonJS의 모듈 방식까지 모든 경우를 커버할 수 있는데,
AMD와 CommonJS 방식 둘다 아닌 경우 모듈을 winodw에 담게 되는 것이다.
보통 플러그인을 까보면 UMD 방식으로 모든 경우를 커버하는 것을 볼 수 있다.
- 추가(ESM)
ECMAScript에서 지원하는 자바스크립트 공식 모듈 시스템으로, 아직 브라우저에서 지원하지 않아 번들러와 함께 사용해야한다.
‘import’를 사용하여 쉽게 모듈을 가져와 사용할 수 있다.
<script type="module" src="index.mjs">
추가하여, 브라우저에서도 모듈 시스템을 사용할 수 있다.
📖 참고
https://www.zerocho.com/category/JavaScript/post/5b67e7847bbbd3001b43fd73
https://beomy.github.io/tech/javascript/cjs-amd-umd-esm/#umd-universal-module-definition