不要使用
shim
带Bootbox。如果你看一下Bootbox的源代码,你会发现它调用了
define
,将其注册为适当的AMD模块。这个
垫片
只有
对于不是适当AMD模块的代码。
现在
定义
在Bootbox中执行以下操作:
define(["jquery"], factory);
它设置了对jQuery的依赖,但这是错误的,因为实际上是Bootbox
而且
取决于引导是否存在。所以我们需要解决这个问题。下面显示了如何修复它。你可以使用
map
配置选项,这样当引导盒需要jQuery时,它就会得到引导。你设置了一个
垫片
对于引导,除了依赖于jQuery之外,其模块值与jQuery相同(
$
).
没有
设置时,无法保证引导会在引导盒之前加载,并且您将面临竞争条件:有时它会工作,有时不会。
requirejs.config({
baseUrl: ".",
paths: {
jquery: "//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min",
bootstrap: "//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min",
bootbox: "//github.com/makeusabrew/bootbox/releases/download/v4.4.0/bootbox.min"
},
shim: {
"bootstrap": {
"deps": ["jquery"],
// We set bootstrap up so that when we require it, the value with get is just $.
// This enables the map below.
"exports": "$"
},
},
map: {
// When bootbox requires jquery, give it bootstrap instead. This makes it so that
// bootstrap is **necessarily** loaded before bootbox.
bootbox: {
jquery: "bootstrap",
},
}
});
require(["jquery", "bootbox"], function($, bootbox) {
$(function(jquery) {
bootbox.alert("bla");
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />