2014-01-09 72 views
5

我想加載幾個RequireJS配置。在我的HTML我加載我的主要配置通過RequireJS - 加載多個配置文件

<script src="../lib/require.js" data-main="../app/requireConfig"></script> 

一旦文件準備就緒,我想加載我所有的插件配置。所以,我創建了一個新的定義文件,該文件認爲,調用require.config功能:

define(['sharedServices/logger'], function (logger) { 

    function configVideo() { 
     logger.info('Adding video modules'); 

     require.config({ 
      path: { 

       Capabilities: 'videoProvider/Capabilities', 
       VideoProviderEnums: 'videoProvider/VideoProviderEnums', 
       VideoProviderCommon: 'videoProvider/VideoProviderCommon', 
       VideoProviderInstance: 'videoProvider/VideoProviderInstance', 
       DummyVideoInstance: 'videoProvider/DummyProvider/DummyVideoInstance' 
      } 
     }); 
    } 

    return { 
     configVideo: configVideo 
    }; 

}) 

不過,我得到以下錯誤:

Uncaught Error: Mismatched anonymous define() module: function (logger) {

回答

2

The error you're getting沒有直接關係的規定的問題(加載多個配置),但是由您的代碼加載組織方式引起。由於手冊說:

To avoid the error:

  • Be sure to load all scripts that call define() via the RequireJS API. Do not manually code script tags in HTML to load scripts that have define() calls in them.
  • If you manually code an HTML script tag, be sure it only includes named modules, and that an anonymous module that will have the same name as one of the modules in that file is not loaded.

所以,現在的問題是,手動加載模塊(?爲你的國家,「當文檔準備好」,你可以澄清引用源實際上是如何加載)時requirejs沒有按」不知道模塊來自哪裏,所以它不能給它命名。如果模塊是通過requirejs api加載的(例如,如果它出現在define調用的依賴關係列表中),並且它是需要本身確定其腳本路徑的requirejs,它將在該文件之後命名該模塊。

一般而言,建議只加載一個腳本標記,加載所有requirejs託管的javascript。這使得開發設置更貼近最終的優化情況(所有腳本連接在一起)。如有必要,仍然可以在單個模塊內調用require.config,並且只有在文檔準備就緒後才能執行一些代碼。舉例來說,我們的許多應用程序在其main.js(由requirejs腳本標記加載的模塊)中執行以下操作:

// sort of bootstrap config 
require.config({ 
    packages: [{ 
    name: "our-framework", 
    location: "../../our-framework/src/" 
    }], 
    // here some app-specific requirejs options 
    waitSeconds: 5 
}); 

// load the framework, the "our-framework/rjs-config" contains 
// framework specific requirejs config (another require.config call) 
require(["our-framework/rjs-config"], function() { 

    // in this context both require configs are loaded 

    require(["application"], function(application) { 
    application.init().run(); 
    }); 

});