3

我正在使用 require.js 并加载了一个处理跟踪的库。但是,我有一些用户阻止它加载。

由于它不是我的应用程序的关键部分,我希望一切都能正常工作,即使我的跟踪库无法加载。

我查看了通过 errbacks、配置回退和全局 onError 函数处理错误的文档。

我在想类似的东西:

requirejs.onError = function (err) {
     var modules = err.requireModules;

     for (var i = 0; i < modules.length; i++) {
          if (modules[i] == 'tracking-lib') {
               // Would be great if I could do something like define('modules[i]', [], null)
          }
     }
};

类似的问题(不能解决我的问题):

requireJS 可选依赖

当ajax返回404时RequireJS中的空依赖项

4

1 回答 1

3

我创建了一个可以延迟加载 AMD 模块的 Require 插件(GitHub 中的代码),例如:

define(["lazy!myModule"], function(myModule) {
    myModule.get().then( // get() returns a promise
        function(m) {
            // handle success, module is in m argument
        },
        function(e) {
            // handle error
        }
    );
});

您可以按原样使用它。或者,您可以创建一个类似的插件,例如optional,而不依赖于 require-lazy。该optional插件可以用作:

define(["optional!myModule"], function(myModule) {
    // code as above
    // or there may be a way to make optional! return null, if loading failed

我的插件中的代码可能会有所帮助,当然还有插件 API 的文档

仍然更简单 - 但恕我直言更脏 - 方法可能是require客户端模块内的可选模块,使用全局require函数:

define([], function() { // USE THE GLOBAL require!!!
    require(["myOptionalModule"],
        function(myOptionalModule) {
            // loaded successfully
        },
        function(error) {
            // load failed
        }
    );
});

(也看看这里- 与最后的代码有关)

总之,我不认为有一种方法可以选择使用普通 API 加载模块。您必须以某种方式自己实现它并使用回调处理异步性,如上所述,无论是在应用程序代码中还是在插件中。

于 2013-09-25T08:42:58.740 回答