2016-03-29 139 views
2

我的RequireJS 2.1.8運行良好,我的Meteor 1.2.1應用程序。具體而言,在我的鋼鐵路由器的路由我有:流星1.3和RequireJS

waitOn: function() { 
    return IRLibLoader.load(requireUrl, { 
     success: function() { 
      require.config({ 
       baseUrl: 'http://...' // real URL here 
      }); 
     } 
    }); 
} 

我升級到1.3流星,但現在我有以下錯誤:「require.config不是一個函數」。

看得更遠,我可以看到modules-runtime軟件包定義了它自己的require變量。

我嘗試了「需要= requirejs」權之前require.config電話,這讓我require.config線運行良好,但隨後流星,出現以下錯誤掛起:

Exception from Tracker afterFlush function: 
meteor.js?hash=ec96c6f…:913 TypeError: id.charAt is not a function 
    at fileResolve (modules-runtime.js?hash=939c79d…:288) 
    at require (modules-runtime.js?hash=939c79d…:90) 
    at .<anonymous> (index.js:6) 
    at blaze.js?hash=38069f4…:3331 
    at Function.Template._withTemplateInstanceFunc (blaze.js?hash=38069f4…:3677) 
    at fireCallbacks (blaze.js?hash=38069f4…:3327) 
    at .<anonymous> (blaze.js?hash=38069f4…:3420) 
    at blaze.js?hash=38069f4…:1773 
    at Object.Blaze._withCurrentView (blaze.js?hash=38069f4…:2204) 
    at blaze.js?hash=38069f4…:1772 

好像流星沒有按不希望「需要」重新定義。

我該如何讓Meteor 1.3和RequireJS愉快地共存。

回答

0

原來,在waitOn函數中,Meteor 1.3 module.js重新定義了「require」變量。作爲一個局部變量,這是一個很好的做法,但它與RequireJS將require定義爲全局衝突,因此使用require全局的代碼將失敗。

採取兩項措施來解決它: 1.用於requirejs.config代替require.config 2.重寫了我定義了使用要求他們內部的依賴於要求:

define([ 
    'require', 
    ... 
], 
function (
    require, 
    ... 
) { 
    require(...); // code that works :-) 
});