Requirejs используя шим
Используя shim от 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 ответа
Хорошо, если подчеркивание уже загружено и доступно, вам не нужна прокладка. Магистраль с удовольствием загрузится. Если нет, то это, вероятно, потому что подчеркивание не загружено.
Как бы то ни было, звучит неправильно, если вы используете только require.js, вы можете также AMD загрузить их все. Для этого вам необходимо изменить свою прокладку следующим образом:
shim: {
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
underscore: {
exports: "_"
}
}
и, конечно, обновить свой paths
,
Я не уверен, что вы смогли найти лучший подход для вашего варианта использования. Если вам действительно - по какой-то причине - необходимо добавить другие сценарии без использования 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>