我想创建一个requirejs扩展, 理想 看起来像这样:
var versions = ['one', 'two', 'three'];
define({
load: function (name, req, onload, config) {
var load = function (version) {
try {
req([name + '.' + versions[version]], function (value) {
onload(value);
});
} catch(ex) {
if (version === versions.length - 1)
throw err;
load(version + 1);
}
};
load(0);
});
});
基本上,我想这样做:
require(['plugin!my/file'], function (dep) {
});
幕后的逻辑应该是:
检查我的/ file.one.js。如果存在,请将其返回。如果不是......
检查我的/ file.two.js。如果存在,请将其返回。如果不是......
检查我的/ file.three.js。如果存在,请将其返回。如果不是......
投掷
问题似乎是请求从req
抛出不存在的文件的错误是异步的,因此不能以这种方式捕获。
有关完成此类功能的任何建议吗?
我找到requirejs fallbacks,但这些只适用于您的require配置中定义的路径。我想要一个标准需求调用的完全相同类型的功能。
我还发现require.defined
和require.specified
但是,似乎只能处理通过require.config定义的模块或尝试加载给定模块后的模块。
答案 0 :(得分:1)
在我看来,你想要使用errback。所以像这样:
var versions = ['one', 'two', 'three'];
define({
load: function (name, req, onload, config) {
var load = function (version) {
req([name + '.' + versions[version]], function (value) {
onload(value);
},
function (err) {
if (version === versions.length - 1)
throw err;
load(version + 1);
});
};
load(0);
});
});
errback是传递给req
的第二个函数。加载模块失败时将调用它。