2015-05-12 87 views
-1

我是一個受虐狂,所以我決定改變我在我的項目中加載require.js的方式。我所做的只是從這裏(用Modernizr.load)去...未捕獲的錯誤:不匹配的匿名定義()模塊

<script type="text/javascript"> 

    function requireJsConfig() { 
     requirejs.config({ 
      'baseUrl': '{{ STATIC_URL }}js', 
      'paths': { 
       'jquery': 'libraries/jquery', 
       'backbone': 'libraries/backbone', 
       'underscore': 'libraries/underscore', 
       'jquery.cookie': 'libraries/jquery-cookie', 
       'tinymce': 'tinymce/tinymce.min', 
       'react' : 'libraries/react', 
       'history': 'history' 
      }, 
      waitSeconds: 30, 
      shim: { 
       'jquery' : 'jquery', 
       'underscore' : { 
        exports: '_' 
       }, 
       'backbone': { 
        deps: ['underscore', 'jquery'], 
        exports: 'Backbone' 
       }, 
       'jquery.cookie': { 
        deps: ['jquery'], 
        exports: '$.cookie' 
       }, 
       'tinymce': { 
        deps: ['jquery'], 
        exports: 'tinymce' 
       } 
      } 
     }); 

     define('static_url', [], "{{ STATIC_URL }}"); 
     window.static_url = "{{ STATIC_URL }}"; 
     define('PUBNUB_SUBSCRIBE_KEY', [], "{{ PUBNUB_SUBSCRIBE_KEY }}"); 

     require(["teacher"]); 
    }; 

    Modernizr.load({ 
     load: '{{ STATIC_URL }}js/require.js', 
     complete: function() { 
      requireJsConfig(); 
     } 
    }); 

</script> 

...這(不使用Modernizr.load)...

<script type="text/javascript" src="{{ STATIC_URL }}js/require.js"></script> 

<script type="text/javascript"> 

    function requireJsConfig() { 
     requirejs.config({ 
      'baseUrl': '{{ STATIC_URL }}js', 
      'paths': { 
       'jquery': 'libraries/jquery', 
       'backbone': 'libraries/backbone', 
       'underscore': 'libraries/underscore', 
       'jquery.cookie': 'libraries/jquery-cookie', 
       'tinymce': 'tinymce/tinymce.min', 
       'react' : 'libraries/react', 
       'history': 'history' 
      }, 
      waitSeconds: 30, 
      shim: { 
       'jquery' : 'jquery', 
       'underscore' : { 
        exports: '_' 
       }, 
       'backbone': { 
        deps: ['underscore', 'jquery'], 
        exports: 'Backbone' 
       }, 
       'jquery.cookie': { 
        deps: ['jquery'], 
        exports: '$.cookie' 
       }, 
       'tinymce': { 
        deps: ['jquery'], 
        exports: 'tinymce' 
       } 
      } 
     }); 

     define('static_url', [], "{{ STATIC_URL }}"); 
     window.static_url = "{{ STATIC_URL }}"; 
     define('PUBNUB_SUBSCRIBE_KEY', [], "{{ PUBNUB_SUBSCRIBE_KEY }}"); 

     require(["teacher"]); 
    }; 

    requireJsConfig(); 

</script> 

...現在我得到這個:

Uncaught Error: Mismatched anonymous define() module: function (){return r}

FWIW,這是在錯誤發生的事情(在require.js):

function intakeDefines() { 
    var args; 

    //Any defined modules in the global queue, intake them now. 
    takeGlobalQueue(); 

    //Make sure any remaining defQueue items get properly processed. 
    while (defQueue.length) { 
     args = defQueue.shift(); 
     if (args[0] === null) { 
      return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); 
     } else { 
      //args are id, deps, factory. Should be normalized by the 
      //define() function. 
      callGetModule(args); 
     } 
    } 
} 

順便說一句,我已經驗證these沒有適用。

爲什麼這個看似無害的變化會導致核彈在我的項目中爆炸? (是的,一枚實際的核彈引爆......彷彿數百萬的聲音突然在恐怖中大聲喊叫,並突然沉默......)

回答

0

你說「這些都不適用」,但是除非你手工修改下劃線,它certainly does

+0

但我不是在HTML'

0

讓我們來看看,如果我能解釋它比帕特里克沒有更好的...

,因爲它檢測它是否與AMD的裝載機運行時,您不需要爲underscore一個shim,如果是這樣,那麼它調用define對於調用define的模塊,請勿使用shim

您還應該刪除用於jQuery的shim。除非您使用的是古老版本,否則它也會檢測到它是使用AMD加載程序運行並呼叫define。此外shimjquery: "jquery"是沒有意義的。 (最接近有意義shim我能想到的是jquery: ["jquery"]這將意味着「jquery取決於jquery」。)

至於爲什麼當您使用shim與調用define你進入未定義的模塊它會前工作...領土:有時它起作用,有時它不起作用。

我不知道其他模塊是否需要墊片,因爲我不經常使用它們。如果我是你,我會檢查他們是否撥打define

+0

謝謝。這在邏輯上是合理的,但是在從墊片中刪除jquery,underscore和backbone(所有這些都支持AMD)之後,當我啓動我的服務器時會遇到不同的錯誤,例如'Uncaught TypeError:object is not a function'試圖創建主幹模型或'$ .ajaxSetup不是函數'。每次啓動服務器時,錯誤都來自需求鏈中的不同腳本。因此,即使我的第一個必需腳本的第一行是'require(['jquery','underscore','backbone',...])',jquery,underscore和backbone現在還沒有被加載。 –

相關問題