Requirejs 忽略可选依赖项的加载错误

Requirejs ignore loading error for optional dependency

本文关键字:加载 错误 依赖 Requirejs      更新时间:2023-09-26

我正在使用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 中的空依赖项

我创建了一个可以延迟加载 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,而不依赖于需求懒惰。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 加载模块。您必须以某种方式自己实现它,并通过回调处理异步性,如上所述,无论是在应用程序代码中还是在插件中。