javascript - 关闭编译器删除类 namespace

标签 javascript google-closure

我有一堆互相继承的 JavaScript 原型(prototype)。每个类都在自己的文件中定义,如下所示。示例文件如下所示:

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.inherits 无法找到 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 ..

关于javascript - 关闭编译器删除类 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331198/

相关文章:

javascript - 使用 Closure 编译器输入 indexOf 重新定义

javascript - 如何根据另一个引用文献的变化过滤引用文献?

javascript - 如何从 JavaScript 文件覆盖 html 元素

javascript - 我的应用程序 URL 未在 PhantomJs 浏览器中打开

javascript - 如何设置表格内容的样式?

javascript - 哪个控制流库与谷歌闭包库一起使用?

javascript - Google Maps Api v3 标记。谷歌未定义

javascript - 使用局部变量调用 onclick

javascript - 如何在谷歌闭包中注释哈希?

javascript - 使用图像文件创建 goog.ui.Button 实例