始终要求RequireJS中的某些依赖项

时间:2013-03-22 05:29:57

标签: javascript requirejs

我正在开展Backbone项目,我正在使用 RequireJS 加载jQueryUnderscoreBackbone

我发现自己在所有模块中一遍又一遍地输入这种模式:

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...

有没有一种方法或解决方法可以让这3个库可供所有模块使用,而无需明确要求它们,所以我可以集中精力要求额外的东西?

我虽然在脚本标记中加载这个依赖项堆栈,并使用RequireJS作为我的模块和额外的依赖项,但是我必须通过自己连接jquery,下划线和骨干来丢失JamJS编译功能。

修改

请参阅Backbone Boilerplate:他们也在使用JamJS,但他们不需要在每个文件上使用主干,下划线和jquery。不知何故,所有人都可以使用它。

他们需要带有RequireJS的标记中的config.js文件。这会导出require.config内容,然后委托给main.js。在主要内容中,他们可以神奇地访问 Backbone

中间发生了什么?

2 个答案:

答案 0 :(得分:1)

我在评论中提到了一个沙箱。以下是咖啡脚本中的示例:

define [
  "core"
  "jquery"
  "extensions/backbone"
  "underscore"
], (core, $, backbone, underscore) ->

  util: 
    underscore: underscore
  mvc:
    Model: backbone.Model
    Collection: backbone.Collection
    View: backbone.View
    Events: backbone.Events
    Router: backbone.Router

这允许我做

define ["sandbox"], (sandbox) -> class View extends sandbox.mvc.View

这类似于AuraJS project中使用的沙箱以及facade pattern的实施,它具有以下优势......

  

它允许您公开可安全的JavaScript库部分   使用而不是暴露整个API。这特别有用   在团队合作时。

此外,将来如果我想从BaseView类而不是直接从Backbone.View扩展所有视图,我只需要更改沙盒中的引用。

答案 1 :(得分:0)

您好,您可以使用SHIM Config

进行全局访问

从那里取得的例子:

shim: {
    'backbone': {
        //These script dependencies should be loaded before loading
        //backbone.js
        deps: ['underscore', 'jquery'],
        //Once loaded, use the global 'Backbone' as the
        //module value.
        exports: 'Backbone'
    },