我有一个使用RequireJS来管理依赖关系的现有项目(它在浏览器中完全运行,没有服务器端组件)。以前我一直在定义“类”(包括继承)的方式是这样的:使用RequireJS包含使用ES6语法定义的类
define([
'jquery',
'classes/SomeParentClass',
], function($, SomeParentClass){
function ThisClass(data){
SomeParentClass.call(this, data);
this.init = function(data){
//Do stuff
}
this.init(data);
}
ThisClass.prototype = Object.create(SomeParentClass.prototype);
ThisClass.prototype.constructor = ThisClass;
return ThisClass;
});
,然后当我想包括它在其它的类我会使用标准的RequireJS定义/要求的语法:
define(['classes/ThisClass'], function(ThisClass){
var fooInstance = new ThisClass(fooData);
});
我想试试我的手在ES6“阶级”的语法,所以我开始着手将我现有的类(我开始为简单起见,“静态”类)中的一个。目前,它看起来是这样的:
define([
'jquery',
], function($){
class SomeClass {
static someStaticFn(){
//Do whatever
}
}
});
在哪里我目前阻碍是如何使用RequireJS引用SomeClass的(新ES6语法)。假设这甚至是可能的。
UPDATE
正如其他人在下面指出的那样,返回类是所有RequireJS关心。我可以发誓,我已经尝试过,但肯定它的工作。
万一别人是像我这样的假,并在类似情况下在这里结束了,我也想指出的是,我确实有一些成功与requirejs-babel插件,但只有后,我重新写了我ES6 export and import statements代替RequireJS的定义。已经做了,其他地方后,我包括类我不得不这样做,像这样:
define(['es6!ThisClass'], function(ThisClass){ ...
我最终选择来修改在包括每其他模块类,所以将所有那些“ ES6!”字符串变成了相当的阻力。尽管将现有项目移植到ES6的this article提到了通过RequireJS配置自动执行该过程的方法。
但是,因为requirejs-babel在运行时会传输ES6代码,所以我现在可能不会将它加入到我的项目中。如果我确定我想要用ES6整个猪,我可能会使用“常规”Babel或可能TypeScript
对RequireJS来说,无论类是使用'function'还是'class'语法来定义,它都没有什么区别。你只需要从你的模块定义中“返回”它。 – Bergi