2013-08-29 41 views
0

我使用RequireJS,併爲r.js創建了以下構建配置文件。我的主要文件是app.js,它導入了jquery,ember,handlebars和下劃線。我有另一個文件特定於我的應用程序的一個名爲change_email.js的頁面。它也輸入燼。減少RequireJS模塊之間的代碼重複

({ 
    modules: [{ 
     name: 'js/app', 
     // jQuery is included in the page 
     exclude: ['jquery'], 
     include: ['ember', 'handlebars', 'underscore'] 
    }, { 
     name: 'js/change_email', 
     exclude: ['jquery', 'js/app'] 
    }], 
    mainConfigFile: 'requirejs_config.js' 
}) 

RequireJS配置是這樣的:

requirejs.config({ 
    paths: { 
     'jquery': 'js/lib/jquery', 
     'ember': 'js/lib/ember-1.0.0-rc.6.1', 
     'handlebars': 'js/lib/handlebars-1.0.0-rc.4', 
     'underscore': 'js/lib/underscore' 
    }, 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     'ember': { 
      deps: ['jquery', 'handlebars'], 
      exports: 'Ember' 
     }, 
     'handlebars': { 
      exports: 'Handlebars' 
     } 
    } 
}); 

我注意到,有時當我加載頁面,灰燼從app.js運行,有時它是從ember-1.0.0-rc.6.1.js運行。我認爲這是一種競爭條件。在Ember從ember-1.0.0-rc.6.1.js運行的情況下,已經下載了包含Ember的2個文件app.jsember-1.0.0-rc.6.1.js。這似乎與直覺相反,因爲使用RequireJS的目標之一是減少下載的代碼量。

我想過要製作app.js導入,然後導出餘燼,並讓其他模塊從app.js.中導入Ember。我不太喜歡這個想法,因爲它需要我將我的進口改爲不自然的風格。

什麼是最有效的方法來刪除重複?

+0

雖然你的問題是沒有這一項的副本,我[這裏的答案](http://stackoverflow.com/questions/18500478/dynamically-included-javascript-and-dependencies/18500559#18500559)可能會給你一個可能的解決方法。 –

+0

app.js中目前有哪些模塊?你能打開構建的文件並列出它們嗎? – Chris

回答

0

錯誤不是定義產品代碼應該從哪裏加載模塊。通過在我的生產配置中定義以下內容,我可以正常工作。

requirejs.config({ 
    baseUrl: '/static', 
    paths: { 
     'jquery': 'js/app', 
     'ember': 'js/app', 
     'handlebars': 'js/app', 
     'underscore': 'js/app', 
     'underscore.string': 'js/app' 
    } 
});