Universal Module Definition (UMD) 패턴은 CommonJS (Node.js), AMD (RequireJS), 브라우저 <script> 환경 전반에서 문제없이 로드되는 JavaScript 라이브러리를 제작하는 표준적인 방식입니다.
외부 종속성이 있는 UMD
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. 익명 모듈로 등록
define(['b'], factory);
} else if (typeof module === 'object' && module.exports) {
// Node.js / CommonJS
module.exports = factory(require('b'));
} else {
// 브라우저 전역 객체 (root는 window)
root.myModule = factory(root.b);
}
}(typeof self !== 'undefined' ? self : this, function (b) {
// 모듈 구현부
function myModule() {}
myModule.prototype.doSomething = function () {};
return myModule;
}));
종속성 없는 독립형 UMD
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory();
} else {
root.myUtility = factory();
}
}(typeof self !== 'undefined' ? self : this, function () {
return {
greet: function (name) {
return '안녕하세요, ' + name + '!';
}
};
}));