【问题标题】:Always require certain dependencies in RequireJS在 RequireJS 中总是需要某些依赖项
【发布时间】:2013-03-11 21:31:23
【问题描述】:

我正在处理 Backbone 项目,我正在使用 RequireJS 加载 jQueryUnderscoreBackbone

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

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

有没有一种方法或解决方法可以让所有模块都可以使用这 3 个库,而无需明确要求它们,这样我就可以专注于需要额外的东西?

虽然我打算在脚本标签中加载此依赖项堆栈,并为我的模块和额外的依赖项使用 RequireJS,但我不得不自己连接 jquery、下划线和主干,从而失去了 JamJS 编译功能。

编辑:

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

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

中间发生了什么?

【问题讨论】:

  • 尝试制作沙盒,然后只需要沙盒
  • 沙盒是什么意思?你能提供更多信息吗?

标签: javascript requirejs


【解决方案1】:

您好,您可以使用 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'
    },

【讨论】:

  • 这给我留下了define([backbone], function() {})。 Shim 不会触发自动下载。即使我需要根文件中的 Backbone(并且 Backbone 已经下载),我也必须在所有模块中明确要求它们
【解决方案2】:

我有一个在 cmets 中提到的沙盒。这是咖啡脚本中的示例:

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 扩展所有视图,我只需要更改沙箱中的引用即可。

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2018-09-20
    • 1970-01-01
    • 2018-04-13
    • 2014-01-24
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多