2014-07-03 39 views
1

我想在整個代碼庫中使用Backbone插件,但是我不希望每次使用它時都需要它與Backbone一起使用。現在,我的劇本是這樣的:RequireJS - 總是加載與庫的依賴關係

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

Backbone.EventStreams僅僅簡單地擴展Backbone,所以這將是不錯的功能可自動每當我包括骨幹網,而無需單獨添加它的每個文件。

Pyykkis,在他的TodoMVC示例中,simply requires it at the entry point並且似乎使其始終可用。但是,這對我來說就像是一個黑客。

這種方法有什麼缺點嗎?如果是這樣,那麼解決這個問題的正確方法是什麼?

+0

見https://stackoverflow.com/questions/26505925/ – marcus

回答

0

在使用requireJS的項目中不應該有任何全局變量,這就是使用requireJS的動機之一,也就是避免污染全局名稱空間......只需通過使用require不加載入口點處的任何模塊讓全球..Check這個鏈接,這可能是有幫助的global variables in requireJS

+0

據我所知,應該有一個RequireJS項目沒有全局變量。我需要的是'Backbone.EventStreams'作爲'Backbone'的一部分免費加載,無論何時我需要'Backbone'。更新了問題以澄清。 –

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' 
      } 
     }); 

在這裏,只要你定義或需要骨幹,你可以直接訪問骨幹方法.EventStreams對象

0

所以根據你所說的話,這個插件對Backbone有依賴性。 Backbone不支持AMD,因此您需要使用shim命令來加載它。

要簡單加載骨幹,你需要這樣的東西。

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

現在使用Backbone.EventStreams插件如你所說,這個插件對骨幹dependecy,所以你需要有這樣的事情。

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' 
     } 
    }); 

使用導出可以指定要在應用程序中使用該模塊的名稱。

希望它可以幫助