2013-08-29 40 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' 
    } 
});