闭包编译器删除类名称空间
Closure compiler removing class namespaces
我有一堆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中的'app'已被单个'a'和goog取代。继承无法找到app.classes.ClassA,因为它未定义。
如何防止闭包编译器像这样重命名命名空间?
谢谢!
有两种方法,首先你可以用@expose:
注释你的外部方法/变量/类(function() {
/**
* @expose
*/
a.classes.ClassA = function() {
// constructor
}
a.classes.ClassA.prototype.example = function() {
// example method
}
})();
或者,您可以在运行闭包编译器时禁用优化:
java -jar ccompiler.jar --compilation_level WHITESPACE_ONLY ..
相关文章:
- JS编译器/包管理器,用于版本控制
- JavaScript名称空间和对象创建
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 具有大型几何图形的基于沙发的空间查询
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- 如何使用javascript命名空间
- 为其他JS生成定义“;编译器”;来自TypeScript定义文件
- JSDoc:模块和名称空间之间的关系是什么
- Typescript编译器错误,Angular 1.5组件应为分号
- 使用Google闭包编译器包含一个Ecmascript 6类
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 动画制作/减缓元素填充移除元素留下的空间
- Google Closure编译器为命名空间创建了不完整的别名
- 为什么Google闭包编译器在原始命名空间为空的情况下向全局命名空间添加变量
- 重新格式化javascript以适应google闭包编译器's命名空间扁平化
- 闭包编译器删除类名称空间