Импорт UMD библиотек

Пользовательская библиотека JavaScript должна быть импортирована с использованием подхода UMD.

Это означает, что следующий подход потерпит неудачу:

function ULID() {
    ... 
    return function() {
        ... 
    };
}
exports.ULID = ULID

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;
});

Last updated