我有一堆相互继承的JavaScript原型。每个类都在它自己的文件中定义。示例文件如下所示:
goog.provide("app.classes.ClassA");
(function() {
app.classes.ClassA = function() {
// constructor
}
app.classes.ClassA.prototype.example = function() {
// example method
}
})();
第二个文件可能如下所示:
goog.provide("app.classes.ClassB");
goog.require("app.classes.ClassA");
(function() {
app.classes.ClassB = function() {
// constructor
}
goog.inherits(app.classes.ClassB, app.classes.ClassA);
app.classes.ClassB.prototype.example = function() {
// example method
}
})();
运行编译器后,第一个文件中指定的代码如下所示:
goog.provide("app.classes.ClassA");
(function() {
a.classes.ClassA = function() {
// constructor
}
a.classes.ClassA.prototype.example = function() {
// example method
}
})();
'应用'在ClassA中,已被单个' a'并且goog.inherits找不到app.classes.ClassA,因为它未定义。
如何防止Closure Compiler重命名这样的命名空间?
谢谢!
答案 0 :(得分:0)
有两种方法,首先你可以用@expose注释外部方法/变量/类:
(function() {
/**
* @expose
*/
a.classes.ClassA = function() {
// constructor
}
a.classes.ClassA.prototype.example = function() {
// example method
}
})();
或者,您可以在运行闭包编译器时禁用优化:
java -jar ccompiler.jar --compilation_level WHITESPACE_ONLY ..