我偶然发现这篇文章约约骨干与requirejs应用程序。 有一两件事似乎非常奇怪。 每当他们需要骨干的参考,下划线或jQuery的在我的模块我不得不要求他们:
define([
'jQuery',
'Underscore',
'Backbone',
'collections/projects',
], function($, _, Backbone, ProjectsCollection, projectsListTemplate){
var projectListView = Backbone.View.extend({
el: $("#container"),
...
那么,真的有必要走那条路? 是不是有点过工程? 我不能只是加载骨干和它的依赖之前,我开始我的应用程序,并把它们作为全局对象像我会做没有requirejs? 或者在这里想念我的东西吗?
有优点/缺点无论哪种方式。
优点:
你的依赖管理完全由require.js控制,而不是依靠同步加载全局作用域库。 它的优雅,模块化的,并可能是正确的方式做事。
优点:
它更容易在库的版本交换,特别是每个模块。 我诚实地从来没有见过这样的做法 - 这似乎是一个“假设”情况,而不是实际的东西。 如果你这样做,那么你很可能黑客的东西一起反正牺牲“代码优雅”您使用了他们作为首位获得模块。
坏处:
你得到了很多样板进口。
define(['jQuery', 'underscore', 'backbone', 'raphael', ...],
在一个大的应用程序,你会得到你的依赖关系,才能够采取半打库的依赖。 在每个模块。
冗余感觉为骨干重的应用程序,其中每个模块可能是限定一个骨干模型/控制器/视图尤其不必要-几乎每个模块需要骨干。
你可以包装它们都变成一个单一的Lib
,你想引用类似模块Lib.$(...)
或Lib._(...)
不过这只是移动样板出来的进口和到代码。 这也否定了优势#2。
那么哪一个?
我想说每个图书馆去查找个人和决定它是否应该是全球性的还是其自身的导入模块。
如果你打算到几乎无处不在使用库(如jQuery的,骨架),那么只要保持全球。
对于其它库,你可能只在一对夫妇的意见(如Raphael.js)使用它们。 在这种情况下,导入它作为一个模块。