require.js依赖项 - 如何在其他脚本中合并依赖项方法

时间:2015-01-14 18:48:51

标签: backbone.js requirejs dependencies

我在backbone.js项目中使用raphael.js。导入raphael就像一个魅力(这个版本符合AMD标准)。一切都按预期工作。 "应用"这是另一个app.js文件中定义的预定义全局对象。

定义([' jquery','下划线',' app',' backbone'' raphael' ] 功能($,_,app,Backbone,Raphael){

var AppView = Backbone.View.extend({

initialize: function() { 

    app.paper = Raphael(0, 0, app.w, app.h);

}    ...    })})

现在我的app.paper有拉斐尔的所有方法。真棒!

我刚刚在Raphael API中发现我可以使用Raphael.el和Raphael.fn添加我自己的预定义方法

initialize: function() { 

    app.paper = Raphael(0, 0, app.w, app.h);

    Raphael.el.myfill = function(){
        this.attr('fill', '90-#fff-#000');
    }

    app.paper.circle(x,y,r).myfill(); //it works! (Brilliant!)

    }

}

我的问题是,如何将Raphael.el.myfill定义与其他Raphael.fn.mydefined方法一起放入另一个javascript文件并将其带入上面的AppView?

我不想使用冗长的定义堵塞我的AppView文件,而且我也希望提供关于我在不同视图中使用哪种Raphael。[el | fn]定义的可变性。但是由于这些对象构造函数已经是我已经作为依赖项引入的Raphael.js对象的一部分,我不确定如何使用require分离Raphael.el和Raphael.fn定义.js协议。在require.js之前,我会简单地将这些定义放在另一个myRaphaelDefs.js文件中,添加另一个"脚本"标记为我的HTML并且它们总是可用,但这是2015年,我已经跳上了模块化的js潮流。

我使用符合AMD标准的RedRaphael分支机构,因此我没有"定义" Raphael.js本身的包装。如果这个库带有这样的包装器,我可能会尝试将外包定义直接添加到Raphael.js作为依赖项。 (不是一个选项)RedRaphael开箱即用于require.js,所以没有"定义"在那里包装。

1 个答案:

答案 0 :(得分:0)

我们所做的是在我们的库周围添加一个包装器并使用require.config中的map选项进行路由,因此包装器获取原始库,但其他所有内容都会抛出包装器:

圣拉斐尔-wrapper.js:

define(['raphael'], function (Raphael) {
    Raphael.el.myfill = function(){
        this.attr('fill', '90-#fff-#000');
    };
    return Raphael;
});

require.config:

{
    paths: {
        'raphael': '/path/to/rahpael'
    },
    map: {
        '*': {
            'raphael': '/path/to/rahpael-wrapper'
        },
        '/path/to/rahpael-wrapper': {
            'raphael': 'raphael'
        }

    }
}