在RequireJS插件中使用config

时间:2013-08-06 20:50:50

标签: javascript requirejs

我正在尝试编写一个RequireJS插件,它接受所请求模块的名称,动态地计算出它的路径,然后加载它。确定这些路径的逻辑是基于某些特定的业务逻辑,因此任何现有插件都不太可能对我有用。

我最初尝试使用插件的normalize方法,但是发生了奇怪的事情:normalize被调用了两次,之后调用了load方法,名称为空字符串。

使用load的config参数,我在没有规范化的情况下完美地工作。这是一个没有任何隐藏副作用的合适解决方案吗?

define('module-loader', {
    load: function(name, req, onload, config){
        var nameParts = name.split('-'),
                langFile = nameParts.length === 3 && nameParts[2] === 'langs',
                indFiles = CR_DEBUG;

        if (nameParts.length > 3){
            //allow for helper names with a dash in them
            nameParts[2] = nameParts.slice(2).join('-');
        }
        var resolvedName = resolve.apply(null, nameParts);

        config.paths[name] = resolvedName;
        req([name], function (value) {
            onload(value);
        });
    }
});

我认为配置对象只是当前的requireJS配置对象,可以添加到该对象中。 我看到的结果确实暗示了这种情况。但是文档对配置对象的作用有不同的解释:

  

config:对象。配置对象。这是一种方式   优化器和Web应用程序将配置信息传递给   插入。 i18n!插件使用它来获取当前当前的语言环境,   如果Web应用程序要强制使用特定的区域设置。优化器会   如果这个插件(或者),则将配置中的isBuild属性设置为true   pluginBuilder)被称为优化器构建的一部分。

部分解释确实暗示了我的建议,但我希望专家可以更肯定地回答。


对于它的价值,这就是我对normalize方法所拥有的。我对目前的解决方案非常满意,但如果下面的内容显然有问题,我很想听听:

normalize: function (name) {
    //weird - normalize getting called twice - hack fix for now
    if (/^\//.test(name)) return name;

    var nameParts = name.split('-'),
        langFile = nameParts.length === 3 && nameParts[2] === 'langs',
        indFiles = CR_DEBUG;

    if (nameParts.length > 3){
        //allow for helper names with a dash in them
        nameParts[2] = nameParts.slice(2).join('-');
    }
    var resolvedName = resolve.apply(null, nameParts)

    //alert('returning:' + resolvedName);
    return resolvedName;
},

//and after this there was just a regular load method loaded 
//the name it was passed, but name was coming in as ""

0 个答案:

没有答案