RequireJS - 加载多个配置文件

6

我正在尝试加载多个RequireJS配置文件。在我的html中,我通过以下方式加载我的主配置文件:

 <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: 匿名定义的模块不匹配:function (logger) {

1个回答

4

你遇到的错误与所述问题(加载多个配置)没有直接关系,而是由于代码加载方式的组织方式造成的。正如手册所说:

为了避免错误:

  • 确保通过RequireJS API加载调用define()的所有脚本。不要在HTML中手动编写脚本标记以加载其中具有define()调用的脚本。
  • 如果您手动编写HTML脚本标记,请确保它仅包括命名模块,并且不会加载将与该文件中某个模块具有相同名称的匿名模块。

因此,现在的问题是当手动加载模块时(正如您所述,“当文档准备好时”),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();
  });

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接