2015-04-29 50 views
0

我真的很喜歡類似AMD的js模塊管理語法。現在我想弄清楚如何在早午餐中使用require.js。 這是我想要實現的:早午餐:如何正確處理AMD和供應商代碼?

  1. 所有供應商代碼應該連接在一個文件中。
  2. 導出的供應商符號應該在全局範圍內可用(因爲 某些第三方代碼EXCPECT可以在其中找到它)。
  3. 我想使用require.js或Almod進行模塊管理。

問題是如果我加載require.js一些供應商腳本正試圖定義匿名模塊。下面是從骨幹剪斷用於參考的代碼:

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

}

結果,require.js抱怨匿名模塊定義。

回答

0

這就是爲什麼包裝的供應商代碼默認在早午餐時禁用。許多供應商腳本使用UMD或他們自己的方式公開其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的可能性,即使包裝,在這些情況下,您的選擇是不使用這些庫,與作者合作以更新它們,或保留自己的修改以使它們與您的項目兼容。

+0

組織供應商代碼「手工」並不是一件非常方便的事情。例如,事實證明,使用requre.js和Bower軟件包是不可能的? – Evgeny

+0

這取決於您想要使用的依賴項的選擇。如果使用AMD對您來說絕對是必需的,那麼您可能必須將您的依賴選擇限制爲已經兼容AMD的那些。 – es128