Вопрос по – Requirejs используя шим

9

Используя shim by requirejs2, есть ли способ сказать, требует ли модуль уже загружен?

Пример:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="undescrore.js"></script>
<script type="text/javascript" src="require.js'"></script>
<script type="text/javascript">
    require.config({
        paths: {
            "backbone": '/vendor/js/backbone-min.js'
        },
        shim: {
            'backbone': {
                //These script dependencies should be loaded before loading
                //backbone.js
                deps: ['underscore', 'jquery'], // here I would like to load the already loaded library
            }
        }
    });
</script>

Ваш Ответ

2   ответа
1

Я не уверен, что вы смогли найти лучший подход для вашего варианта использования. Если вам действительно - по какой-то причине - нужно добавить другие сценарии без использования RequireJS, как в примере с кодом @ js999, то вам нужно проверить, существует ли глобальная переменная (jQuery, _) этих сценариев, а затем определить их как модули , Из вашего примера кода это будет выглядеть примерно так:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="undescrore.js"></script>
<script type="text/javascript" src="require.js'"></script>
<script type="text/javascript">
    // check for jQuery 
    if (window.jQuery) {
        define('jquery', [], function () {
            return window.jQuery;
        });
    }

    // check for underscore
    if (window._) {
        define('underscore', [], function () {
            return window._;
        });
    }

    require.config({
        paths: {
            // remove the file extension (.js)          
            "backbone": '/vendor/js/backbone-min'
        },
        shim: {
            'backbone': {
                deps: ['underscore', 'jquery']
            }
        }
    });
</script>
23

Хорошо, если подчеркивание уже загружено и доступно, вам не нужна прокладка. Магистраль с удовольствием загрузится. Если нет, то это, вероятно, потому, что подчеркиваниеnot на самом деле загружен.

Как бы то ни было, звучит неправильно, если вы используете только require.js частично, вы можете также AMD загрузить их все. Для этого вам нужно изменить свою прокладку следующим образом:

shim: {
    backbone: {
        deps: ["underscore", "jquery"],
        exports: "Backbone"
    },

    underscore: {
        exports: "_"
    }
}

и, конечно, обновить свойpaths.

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