如何在使用Google Closure Compiler时包含Ecmascript 6课程?
例如,我在'stuff / dog.js'中有一节课:
class dog {
constructor() {
…
}
addLeg() {
this.legs++;
}
}
我想把它包含在'stuff / pound.js'中,所以我可以写:
let rex = new Dog();
应如何处理?我不能将stuff.dog用作类名,因此将调用传递给goog.provide()似乎不是一个选项。
感谢您的帮助!
编辑:使用Closure Compiler的最新版本(20160517 1.0),可以使用简单的Ecmascript 6处理:
Animal.js:
export default class{
constructor(){
this.legs = [];
}
addLeg(legId){
this.legs.push( legId );
}
}
Dog.js:
import Animal from './Animal';
export default class extends Animal {
constructor(){
super();
[1,2,3,4].forEach(leg=>this.addLeg(leg));
console.log( 'Legs: ' + this.legs.toString() );
}
}
虽然它确实因某些原因给我一个警告:Closure Compiler warns "Bad type annotation. Unknown type …" when Ecmascript 6 class is extended
答案 0 :(得分:1)
可以将ES6类分配给名称空间:
stuff.dog = class { }
new stuff.dog();
答案 1 :(得分:1)
使用Jeremy和Chad的答案(谢谢,伙计们!)我设法使用类似的东西导入我的课程:
'东西/ dog.js':
goog.module('canine');
canine.dog = class {
constructor() {
…
}
addLeg() {
this.legs++;
}
}
'东西/ pound.js':
goog.require('canine');
let rex = new canine.Dog();
对我来说显而易见的一件事是命名空间(' canine')并不需要与类名或文件名/路径有任何关系。