2015-06-09 25 views
0

我有一些同構的JavaScript。我在客戶端使用RequireJS。與RequireJS同構的JavaScript

(function() { 
    'use strict'; 

    function wrapper(require) { 
     var MyDep = require('my-dependency'); 

     return function MyExportedFunction() { 
      // ... 
     }; 
    } 

    if ((typeof exports === 'object') && module) { 
     module.exports = wrapper(require); // CommonJS 
    } else if ((typeof define === 'function') && define.amd) { 
     define(function(require) { 
      /** 
      * I need to `require` dependencies 
      * in here for them to be available inside 
      * the wrapper function :(
      */ 
      require('my-dependency'); 
      return wrapper(require); 
     }); // AMD 
    } 
}()); 

有沒有辦法規避其放置require statment立即wrapper函數調用之前定位?

如果我省略require語句,RequireJS會抱怨尚未爲上下文加載依賴關係。

我認爲這是RequireJS提前解析和識別require'd依賴的能力的不可逾越的限制。

回答

2

是的,RequireJS只能在傳遞給define的工廠函數中立即存在時才能處理require的CommonJS格式。如果它出現在由工廠函數調用的函數中,但在函數外部定義,則它將不起作用。在內部,RequireJS在工廠函數的源代碼上運行正則表達式。

這就是說,在我看來,你應該能夠取代當前的呼叫define有:

define(wrapper) 

這將調用wrapper一起RequireJS」 require功能參考, RequireJS應能夠分析wrapper的來源以提取CommonJS調用。

+0

好的,謝謝,會試試。 – Ben