早午餐:如何正确处理AMD和供应商代码?

时间:2015-04-29 12:59:21

标签: javascript brunch

我真的很喜欢类似AMD的js模块管理语法。现在我试图找出如何使用require.js和早午餐。 这就是我想要实现的目标:

  1. 所有供应商代码应在一个文件中连接。
  2. 导出的供应商符号应该在全球范围内可用(因为 一些第三方代码EXCPECT在那里找到它。)
  3. 我想使用require.js或Almod进行模块管理。
  4. 问题是如果我加载require.js,一些供应商脚本正在尝试定义匿名模块。以下是从Backbone剪切的代码供参考:

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

    }

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

1 个答案:

答案 0 :(得分:0)

这就是Brunch中默认禁用供应商代码包装的原因。许多供应商脚本都有UMD或他们自己的暴露API的方式,这些API与通用模块包装不兼容,但如果不管它们,它们将与AMD结构一起开箱即用。

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

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

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