Вопрос по requirejs, javascript – Можем ли мы экспортировать несколько не-AMD функций из модуля в requirejs?

8

Если у меня есть модуль не-AMD с именемold.js и внутри этого скрипта у меня есть две функцииf1 а такжеf2 определены. Мне нужно их использовать, как я могу экспортировать оба?

require.config({
    paths: {
        "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min",
    },
    shim: {
        "old": {
            deps: ["jquery"],
            exports: ["f1", "f2"]
        }
    },
    urlArgs: "bust=" + (new Date()).getTime()
});

Это быт работа. я получуsplit ошибка. Док нене говоря уже о нескольких (http://requirejs.org/docs/api.html#config-shimЯ предполагаю, что это потому, что даже эти примеры jquery являются отдельными файлами, и они имеют "запись» функция / класс.

Ваш Ответ

1   ответ
12

если вы хотите экспортировать более одного объекта из модуля, вам ... все равно нужно экспортировать один объект. Стандартная форма состоит в том, чтобы прикрепить ваши функции к объекту экспорта и вернуть, что:

function f1() { ... }
function f2() { ... }

return {
    f1: f1,
    f2: f2
};

Если это код не от AMD, у вас может не бытьreturn Скажите, но выМне все еще нужно добавить объект экспорта.

Похоже,рекомендуемый вариант для старого кода стоит только указатьf1 вexports собственности, но потом займемсяinit функция. Предположительно требуется на самом деле использованиеexports свойство, чтобы проверить, что файл загружен, поэтому он неНе имеет значения, включаете ли вы все элементы. Если предположить,f1 а такжеf2 оба глобальные, вы могли бы сделать это:

shim: {
    "old": {
        deps: ["jquery"],
        exports: "f1",
        init: function() {
            return {
                f1: f1,
                f2: f2
            };
        }
    }
}

Это должно позволить вам требоватьold и получить объект экспорта, а не:f1

require(['old'], function(old) {
    old.f1();
    old.f2();
});
Смотрите мои правки. Я думаю, что это рекомендуемый подход, согласно документам, хотя я неЯ проверил это. nrabinowitz
Да, этот подход работает. Большое спасибо. Я слишком сонный или это комментарий к документации подinit в док слишком запутанно? Я нене вижу какой-либо конкретной ссылки, как решить проблему. Прочитайте всю часть прокладки 3 раза. CppLearner
Хм Да, они не AMD, поэтому они просто обычные функции JavaScript. Вы говорите, что я должен добавить дополнительный код в файл old.js? CppLearner

Похожие вопросы