Я определяю модуль в стиле UMD для определения модуля, который можно использовать в глобальных файлах CommonJS, AMD и браузеров, например:
(function (root, factory) {
if (typeof define === 'function' && define.amd) define(['exports'], factory);
else if (typeof exports === 'object') factory(exports);
else factory(root.GlobalObject = {});
})(this, function (exports) {
// Module definition here
});
Это отлично подходит, если я хочу присоединить свойства к экспортируемому объекту, но что, если я хочу просто вернуть одну функцию-конструктор из этого определения и позволить всем трем системам загрузить этот модуль и напрямую использовать возвращенную функцию, а не необходимость возвращать литерал объекта и обращаться к конструктору как к свойству литерала?