我正在使用require.js并加载了一个处理跟踪的库。但是,我有一些用户阻止它加载。
由于它不是我的应用程序的关键部分,我希望一切仍然有效,即使我的跟踪库无法加载。
我通过errbacks,config fallbacks和全局onError函数查看了处理errors的文档。
我想的是:
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)
}
}
};
类似问题(不能解决我的问题):
答案 0 :(得分:3)
我创建了一个可以延迟加载AMD模块的一点需要插件(code in 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
来自my plugin的代码可能会有所帮助,当然还有docs for the plugin API。
使用全局require
函数,更简单 - 但恕我直言更肮脏 - 可能是require
客户端模块内的可选模块:
define([], function() { // USE THE GLOBAL require!!!
require(["myOptionalModule"],
function(myOptionalModule) {
// loaded successfully
},
function(error) {
// load failed
}
);
});
(另请查看here - 与最后一段代码相关)
总之,我不认为有一种方法可以选择使用普通API加载模块。您将不得不以某种方式自己实现它并使用回调处理异步性,如上所述,无论是在应用程序代码内还是在插件中。