2014-01-09 2 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 Безразлично» t знать, откуда пришел модуль, поэтому он не может присвоить ему имя. Если модуль был загружен через requirejs api (например, если он появился в списке зависимостей вызова define), и он был сам requirejs, который определил его путь к скрипту, он назвал бы модуль после файла.

В целом рекомендуется иметь только один тег сценария, загружающий все javascript, управляемый requirejs. Это делает настройку разработки более точно сопоставимой с возможной оптимизированной ситуацией (где все скрипты объединены вместе). По-прежнему можно сделать вызовы 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(); 
    }); 

}); 
Смежные вопросы