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

Javascript 早午餐:如何正确处理AMD和供应商代码?,javascript,brunch,Javascript,Brunch,我非常喜欢js中类似AMD的模块管理语法。现在我想知道如何在早午餐中使用require.js。 这就是我想要实现的目标: 所有供应商代码应连接在一个文件中。 导出的供应商符号应在全局范围内可用,因为 某些第三方代码可能会在那里找到它。 我想使用require.js或Almod进行模块管理。 问题是如果我加载require.js,一些供应商脚本会试图定义匿名模块。以下是从主干截取的代码,以供参考: if (typeof define === 'function' && define

我非常喜欢js中类似AMD的模块管理语法。现在我想知道如何在早午餐中使用require.js。 这就是我想要实现的目标:

所有供应商代码应连接在一个文件中。 导出的供应商符号应在全局范围内可用,因为 某些第三方代码可能会在那里找到它。 我想使用require.js或Almod进行模块管理。 问题是如果我加载require.js,一些供应商脚本会试图定义匿名模块。以下是从主干截取的代码,以供参考:

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


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

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

您可能想做的是将您的供应商脚本组织到单独的目录中,按需要通过早午餐包装的脚本和不需要包装的脚本进行分类;类似于供应商和供应商包装的东西。使用默认约定设置,Brunch将以供应商包装的方式包装脚本,而不是以供应商包装的方式包装脚本。然后,您可以根据以下条件将它们连接在一起:


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

手工组织供应商代码不是很方便。例如,事实证明,不可能将requre.js与Bower软件包一起使用?这取决于您想要使用的依赖项的选择。如果使用AMD是您的绝对要求,那么您可能必须将依赖项选择限制在那些已经与AMD兼容的选项上。
      joinTo:
          'js/vendor.js': /^vendor(-wrapped)?[\\/](?!mocha|chai|sinon|sinon-chai)/