require.js dependencies - 如何在附加脚本中合并依赖方法
require.js dependencies - how to incorporate dependency methods in additional script
我在 backbone.js 项目中使用 raphael.js。导入 raphael 就像一个魅力(这个版本是 AMD 兼容的)。一切都按预期工作。 "app" 这是在另一个 app.js 文件中定义的预定义全局对象。
定义(['jquery', 'underscore', 'app', 'backbone','raphael' ],
功能($,_,应用程序,Backbone,拉斐尔){
var AppView = Backbone.View.extend({
initialize: function() {
app.paper = Raphael(0, 0, app.w, app.h);
}
...
}) })
现在我的 app.paper 拥有所有拉斐尔方法。太棒了!
我刚刚在拉斐尔 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.mydefinedmethods 一起放入另一个 javascript 文件并将其放入上面的 AppView 中?
我不想用冗长的定义阻塞我的 AppView 文件,而且我还想提供关于我在不同视图中使用的 Raphael.[el|fn] 定义的可变性。但是由于这些对象构造函数已经是我已经作为依赖引入的 Raphael.js 对象的一部分,所以我不确定如何将 Raphael.el 和 Raphael.fn 定义分开使用require.js 协议。在 require.js 之前,我会简单地将这些定义放在另一个 myRaphaelDefs.js 文件中,在我的 html 中添加另一个 "script" 标签,它们将始终可用,但这是2015 年,我加入了模块化 js 潮流。
我使用的是 AMD 兼容的 RedRaphael 分支,所以我在 Raphael.js 本身上没有 "define" 包装器。如果这个库确实带有这样的包装器,我可能会尝试将外包定义作为依赖项直接添加到 Raphael.js 中。 (不是一个选项)RedRaphael 开箱即用 require.js,所以那里没有 "define" 包装器。
我们所做的是在我们的库周围添加一个包装器,并使用 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'
}
}
}
我在 backbone.js 项目中使用 raphael.js。导入 raphael 就像一个魅力(这个版本是 AMD 兼容的)。一切都按预期工作。 "app" 这是在另一个 app.js 文件中定义的预定义全局对象。
定义(['jquery', 'underscore', 'app', 'backbone','raphael' ], 功能($,_,应用程序,Backbone,拉斐尔){
var AppView = Backbone.View.extend({
initialize: function() {
app.paper = Raphael(0, 0, app.w, app.h);
} ... }) })
现在我的 app.paper 拥有所有拉斐尔方法。太棒了!
我刚刚在拉斐尔 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.mydefinedmethods 一起放入另一个 javascript 文件并将其放入上面的 AppView 中?
我不想用冗长的定义阻塞我的 AppView 文件,而且我还想提供关于我在不同视图中使用的 Raphael.[el|fn] 定义的可变性。但是由于这些对象构造函数已经是我已经作为依赖引入的 Raphael.js 对象的一部分,所以我不确定如何将 Raphael.el 和 Raphael.fn 定义分开使用require.js 协议。在 require.js 之前,我会简单地将这些定义放在另一个 myRaphaelDefs.js 文件中,在我的 html 中添加另一个 "script" 标签,它们将始终可用,但这是2015 年,我加入了模块化 js 潮流。
我使用的是 AMD 兼容的 RedRaphael 分支,所以我在 Raphael.js 本身上没有 "define" 包装器。如果这个库确实带有这样的包装器,我可能会尝试将外包定义作为依赖项直接添加到 Raphael.js 中。 (不是一个选项)RedRaphael 开箱即用 require.js,所以那里没有 "define" 包装器。
我们所做的是在我们的库周围添加一个包装器,并使用 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'
}
}
}