RequireJS - 始终加载与库的依赖关系

时间:2014-07-03 17:22:45

标签: javascript requirejs amd

我想在整个代码库中使用Backbone插件,但是我不希望每次想要使用Backbone时都需要它。现在,我的脚本看起来像:

define(
  ['backbone','backbone.eventstreams'], 
  function(Backbone){
    //...
  }
);

Backbone.EventStreams只是扩展Backbone,因此每当我包含Backbone时,无需将其单独添加到每个文件中,就可以自动使用该功能。

Pyykkis,在他的TodoMVC示例中,simply requires it at the entry point似乎可以在整个过程中使用它。然而,这对我来说就像是一个黑客。

这种方法有什么缺点,如果是这样,解决这个问题的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

在使用requireJS的项目中不应该存在任何全局变量,这是使用requireJS的动机之一,即避免污染全局命名空间...只需在入口点使用require doesnt make加载任何模块全球..查看此链接,这可能会有所帮助global variables in requireJS

答案 1 :(得分:0)

在入口点main.js文件中配置requirejs

require.config({
        paths: {
            backbone: libs / backbone,
            underscore: libs / underscore,
            jquery: libs / jquery
        },
        shim: {
            'backbone': {
                //These script dependencies should be loaded before loading
                //backbone.js
                deps: ['underscore', 'jquery'],
                //Once loaded, use the global 'Backbone' as the
                //module value.
                exports: 'Backbone.EventStreams'
            }
        });

无论何时定义或需要主干,您都可以直接访问Backbone.EventStreams对象上的方法

答案 2 :(得分:0)

因此,根据您所说的内容,此插件依赖于Backbone。 Backbone不支持AMD,因此您需要使用shim命令加载它。

要简单加载Backbone,你需要这样的东西。

require.config({
    paths: {
        backbone: libs / backbone,
        underscore: libs / underscore,
        jquery: libs / jquery
    },
    shim: {
        'backbone': {                
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        }
    });

现在使用Backbone.EventStreams插件,如你所说,这个插件依赖于Backbone,所以你需要这样的东西。

require.config({
    paths: {
        backbone: libs / backbone,
        underscore: libs / underscore,
        jquery: libs / jquery
        backboneEventStreams: libs / BackboneEventStreams (path to js file)
    },
    shim: {
        'backbone': {                
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },
        'BackboneEventStreams' :{
             deps:['Backbone'], 
             exports: 'BackboneEventStreams'
        }
    });

使用“导出”指定要在应用中为该模块使用的名称。

希望有所帮助