我试图将bootbox(http://bootboxjs.com)与requirejs一起使用。

main.html

<script>
var require = {
    baseUrl: 'js',
    paths: {
        "jquery"    :['jquery-1.11.0.min'],
        "bootbox"   :['bootbox.min'],
        "bootstrap" :['//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min']
    },
    shim:
        'bootstrap' :{deps:['jquery']},
        'bootbox'   :{deps:['bootstrap'],exports: 'bootbox'}
    }
}
</script>
<script src="require.min.js"></script>
<script src="myscript1.js"></script>


main.js

define(['bootbox'],function(bootbox){
    bootbox.alert("Hello world!"); // working properly
});


myscript1.js

require(['main'],function(){
    bootbox.alert("Hello world!"); // not functioning (bootbox is not defined)
});


通常,一旦加载了bootbox插件,我们就可以在页面上的任何地方使用bootbox:bootbox.alert("Hello world!");使用requirejs时,我必须传递bootbox变量并在每次使用requirejs时都定义它,以便使用bootbox。我尝试使用“出口”,但似乎没有帮助。

bootbox变量一旦加载,如何在全局可用?

谢谢。

最佳答案

如果希望Bootbox在全球范围内可用,则应使用脚本标签手动将其包括在内。 RequireJS不会公开它。

但是,我强烈建议不要这样做。诸如RequireJS之类的依赖框架的整个思想是,您不必在全局范围内定义任何内容,而是要使您的依赖项明确。这不仅允许您延迟加载脚本,而且还可以稍后替换依赖项,例如用于单元测试。

编辑:
As Louis correctly mentioned Bootbox已经具有AMD支持。如果它检测到RequireJS(或任何其他AMD加载程序),则不会在全局范围内暴露任何内容,但是由于它具有AMD支持,因此您也无需进行填充。

关于javascript - requirejs导出全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23335341/

10-10 14:45