我定义了这样的东西:
require.config({
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: [
'underscore',
'jquery'
],
exports: 'Backbone'
},
},
paths: {
jquery: 'libs/external/jquery',
underscore:'libs/external/underscore',
backbone: 'libs/external/backbone',
text: 'libs/external/text',
router: ''
}
});
然后在我的观点中,我每次都需要jquery和下划线,这很烦人:
define('myview',[
'jquery',
'backbone',
'underscore',
'somemodule'
], function($, backbone, underscore) {
我知道有一种方法可以定义一些库,可以称为跨视图/模型/集合等等,而不需要它们,但我不记得正确的实现。
非常感谢任何帮助
答案 0 :(得分:2)
它们已经可以在不定义它们的情况下使用。
jQuery已将自身导出为全局变量
来自http://requirejs.org/docs/jquery.html
jQuery将自己注册为全局变量"
$
"和"jQuery
",即使它检测到AMD / RequireJS。 AMD方法建议不要使用全局函数,但是关闭这些jQuery全局变量的决定取决于你是否拥有依赖于它们的非AMD代码。 jQuery有一个noConflict函数,支持释放对全局变量的控制,这可以在requirejs.config中自动执行
因此,除非您定义noConflict
,否则您可以访问$
和jQuery
,因为它们已附加到window
对象
Backbone和Underscore也可用作全局变量,因为它们是在shim配置中导出的。
请参阅http://requirejs.org/docs/api.html#config-shim和RequireJS - What is the purpose of the "exports" property in shim
因此,以下代码应该可以正常工作
define(['myview'], function(MyView) {
console.log($); // window.$
console.log(Backbone); // window.Backbone
console.log(_); // window._
}