【问题标题】:RequireJS fallback or checking for file existanceRequireJS 回退或检查文件是否存在
【发布时间】:2014-12-24 14:12:35
【问题描述】:

我想创建一个 理想情况下看起来像这样的 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) {

});

而幕后的逻辑应该是:

检查 my/file.one.js。如果存在,则返回它。如果没有……

检查 my/file.two.js。如果存在,则返回它。如果没有……

检查 my/file.three.js。如果存在,则返回它。如果没有……

投掷

问题似乎是req抛出的请求不存在文件的错误是异步的,所以无法通过这种方式捕获。

对于完成此类功能有什么建议吗?

我找到了requirejs fallbacks,但这些仅适用于您的要求配置中定义的路径。我希望标准要求调用具有完全相同类型的功能。

我还发现了 require.definedrequire.specified,但似乎只适用于通过 require.config 定义的模块或在尝试加载给定模块之后。

【问题讨论】:

    标签: javascript requirejs


    【解决方案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 的第二个函数。加载模块失败时调用。

    【讨论】:

    • 这是完美的。不知道errback存在。谢谢!
    • 如果文件不存在,这仍然会引发错误
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2021-04-25
    • 2019-06-28
    • 2012-02-27
    • 2021-12-25
    相关资源
    最近更新 更多