使用requirejs2的shim,有一种方法可以告诉你模块已经加载了吗?
示例:
<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>
答案 0 :(得分:23)
好吧,如果下划线已经加载并且可用,那么根本不需要垫片。 Backbone很乐意加载。如果没有,可能是因为下划线不实际加载。
听起来只是部分使用require.js是错误的,你可能也会把它们全部加载掉。要做到这一点,你需要改变这样的垫片:
shim: {
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
underscore: {
exports: "_"
}
}
当然会更新您的paths
。
答案 1 :(得分:1)
我不确定您是否能够为您的用例找到最佳方法。 如果您真的 - 出于某种原因 - 需要在代码示例@ js999中添加其他脚本而不使用RequireJS,那么您需要检查这些脚本的全局变量(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>