我正在使用requireJS构建网站。
这是我第一次使用requireJS。
我在main.js中配置了requireJS路径:
require.config({
paths: {
'jquery': 'libs/jquery/1.7.2/jquery',
'underscore': 'libs/underscore/1.3.3-amdjs/underscore', // AMD support
'backbone': 'libs/backbone/0.9.2-amdjs/backbone', // AMD support
'marionette': 'libs/marionette/0.9.3-amd/backbone.marionette', // AMD support
'templates': '../templates'
}
});
在我正在使用的模型,视图,集合中;
define([
'jquery',
'backbone'
], function ($) {
var Geo = Backbone.Model.extend({});
return Geo;
});
我不清楚的是:为什么我要继续定义jquery&骨干作为依赖。 我的意思是这个项目和模型永远不会在没有jquery / backbone的情况下运行。
那么为什么不将jquery和backbone添加到index.html作为脚本标记,并在每个对象中保存引用它们。我知道它会污染全局命名空间但不合理吗?
任何建议。
欢呼声,
答案 0 :(得分:2)
@Guy,定义它们是可选的,但是如果你想保持一致,那就比你做得好。这是Require.JS建议的架构。这并不意味着每次将它们定义为deps时都会尝试加载jQuery或Backbone。
此外,在您的示例中,您不需要在回调$
参数中使用function()
。 jQuery和$已经在窗口中了。
define([
'jquery',
'backbone'
], function ($) {
var Geo = Backbone.Model.extend({});
return Geo;
});
另外,在生产中,因为我们有时会使用很多依赖项,所以我们这样做:每次在依赖项中列出require
然后显式分配变量,因为某些依赖项没有AMD支持并且不回报你的期望:
define([
'require'
'moduleA',
'moduleB'
], function (require) {
var moduleA = require('moduleA'),
moduleB = require('moduleB');
/* code */
return;
});
答案 1 :(得分:0)
我认为你的理解是正确的,因为jQuery无处不在,将在index.html页面上用作全局引用,完全在我的项目中,我这样做。
答案 2 :(得分:0)
如果您使用r.js优化项目,我认为在RequireJS中添加每个js文件非常有用。
答案 3 :(得分:0)
如果您创建模块A和B并希望将它们放入另一个项目中,则明确声明依赖项。如果另一个项目只使用没有jQuery的ExtJS怎么办?或者如果他们使用zepto而你特别需要jquery的库呢?只需为jquery添加一个配置即可......并且在需要时将加载jquery。
您不能依赖公共库的存在。将模块包装在requirejs shell中可以保证库的依赖关系存在。而且它的速度要快一点:) http://jsperf.com/requirejs-include-faster(好吧。显然除了ie ..去图)
此外,除非您实际使用jquery,否则您不必要求它。你为什么要在骨干模型中使用?即使在一个视图中,你也可以使用这个。$ el,它会让一个jquery对象回过头去 - 这个。$ el.find('。someclass')