UMD использует единую функцию-оболочку для проверки наличия module.exports (указывающую на среду CommonJS) и define.amd (указывающую на среду AMD). Если ни один из них не найден, предполагается, что он запущен в браузере, и модуль присоединяется к глобальному объекту window.
Вот упрощенный пример модуля UMD:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Зарегистрируйтесь в качестве анонимного модуля.
define([], factory);
} else if (typeof module === 'object' && module.exports) {
// Узел. Не работает со строгим CommonJS, но
// только среды, подобные CommonJS, которые поддерживают module.exports,
// как узел.
module.exports = factory();
} else {
// Глобальные настройки браузера (root — window)
root.myModule = factory();
}
}(typeof self !== 'undefined' ? self : this, function () {
// Код вашего модуля находится здесь
var myModule = {};
myModule.hello = function () {
return 'Hello, world!';
};
return myModule;
}));
В приведенном примере новая структура кода будет выглядеть следующим образом:
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
} else {
var mod = {
exports: {}
};
factory(mod.exports);
global.ULID = mod.exports;
}
})(this, function (exports) {
function ULID() {
...
}
function generator(){
var ulid = new ULID()
return ulid()
}
exports.generator = generator;
});