require.js加载bootstrap undefined

时间:2013-05-14 09:57:16

标签: backbone.js twitter-bootstrap requirejs amd

我的main.js如下所示

requirejs.config({
//By default load any module IDs from ../js
baseUrl: '../js',
paths : {
    'jquery': 'libs/jquery',
    'underscore': 'libs/underscore',
    'backbone': 'libs/backbone',
    'bootstrap': 'libs/bootstrap'
},
shim: {
    'jquery': {
        exports: '$'
    },
    'backbone': {
        //These script dependencies should be loaded before loading
        //backbone.js
        deps: ['jquery', 'underscore'],
        //Once loaded, use the global 'Backbone' as the
        //module value.
        exports: 'Backbone'
    },
    'underscore': {
        exports: '_'
    },
    'bootstrap': {
        deps: ['jquery'],
        exports: 'Bootstrap'
    }
}
});
define(
    ['jquery', 'backbone','underscore', 'bootstrap'],

    function (j, b,  u, boot) {
        console.log('jquery', j);
        console.log('backbone', b);
        console.log('underscore',u);
        console.log('bootstrap', boot);
    }
); 

我的控制台图像是这样的:

enter image description here

当我点击X登录警报时,它们会消失。所以,我认为bootstrap.js正确加载。但是,它在控制台中表示未定义。任何人都能让我清楚的是bootstrap.js是否正确加载并且使用安全?为什么它会说未定义,而其余部分在控制台中定义得很好。

1 个答案:

答案 0 :(得分:3)

由于jquerybackboneunderscore导出全局变量要在其他地方使用,而bootstrap只需要existing jquery object并将添加插件对象,因此它不会导出任何东西。

因此,如果您尝试在define回调中接收它,理想情况下它将是undefined。如果您在页面上使用了任何bootstrap component,如果它正在运行,则意味着集成了bootstrap。

来自requirejs shim docs

  

对于只需要导出任何模块值的jQuery或Backbone插件的“模块”,shim配置只能是一个依赖项数组:

requirejs.config({
  shim: {
    'bootstrap': ['jquery']
  }
});

因此,如果您愿意,您可以声明引导程序,就像在文档中指定的那样。