【问题标题】:Brunch: How to correctly deal with AMD and vendor code?Brunch:如何正确处理 AMD 和供应商代码?
【发布时间】:2015-07-08 18:50:04
【问题描述】:

我真的很喜欢在 js 中用于模块管理的类似 AMD 的语法。现在我想弄清楚如何在早午餐中使用 require.js。 这就是我想要实现的目标:

  1. 应将所有供应商代码连接到一个文件中。
  2. 导出的供应商符号应该在全局范围内可用(因为 一些第 3 方代码 EXCPECT 可以在那里找到它)。
  3. 我想使用 require.js 或 Almod 进行模块管理。

问题是如果我加载 require.js 一些供应商脚本试图定义匿名模块。这是从 Backbone 中截取的代码供参考:

if (typeof define === 'function' && define.amd) {
    define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
      //...
    });

}

因此,require.js 抱怨匿名模块定义。

【问题讨论】:

    标签: javascript brunch


    【解决方案1】:

    这就是为什么在早午餐中默认禁用供应商代码包装的原因。许多供应商脚本都有 UMD 或他们自己的公开 API 的方式,这与通用模块包装不兼容,但如果单独使用它们,它们将与您的 AMD 结构一起开箱即用。

    您可能想要做的是将供应商脚本组织到单独的目录中,由需要由早午餐包装的和不需要的;类似于vendor 和vendor-wrapped。使用默认的conventions 设置,Brunch 会将脚本包装在vendor-wrapped 中,而不是vendor 中的脚本。然后你可以将它们连接在一起(基于your prior question's example):

          joinTo:
              'js/vendor.js': /^vendor(-wrapped)?[\\/](?!mocha|chai|sinon|sinon-chai)/
    

    您仍然可能会遇到一些供应商脚本,这些脚本的结构与 AMD 不兼容,即使在包装后也是如此,在这些情况下,您的选择是要么不使用这些库,要么工作与作者一起更新它们,或维护您自己的修改以使其与您的项目兼容。

    【讨论】:

    • “手动”组织供应商代码不是很方便。例如,事实证明不可能将 requre.js 与 Bower 包一起使用?
    • 这取决于您选择要使用的依赖项。如果使用 AMD 是您的绝对要求,您可能必须将依赖项选择限制为那些已经与 AMD 兼容的选项。
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多