我正在尝试注释我的javascript,因此闭包不会重命名所有符号,因为我也在使用vanilla javascript。
/**
* @constructor
* @expose
* @type{foo}
*/
foo = function (el, args) {
"use strict";
var s = "Hello World";
/*
* @expose
* @this {foo}
* @type {function}
*/
this.introduce = function () {
return s;
};
};
然而,当我通过具有高级优化的闭包编译器运行它时生成的输出是
foo = function() {
this.a = function() {
return"Hello World"
} };
我如何要求关闭以保留引入的名称,因为这将从外部javascript调用。
答案 0 :(得分:4)
以下选项可用于防止Closure Compiler重命名 符号:
@export
(另请参阅:goog.exportSymbol
或goog.exportProperty
)@expose
已被弃用如果您不想在函数原型上定义方法,如您所示
例如,您可以使用foo
导出构造函数goog.exportSymbol
并使用@expose
导出方法。
/**
* @param {Element} el
* @param {...*} args
* @constructor
*/
var foo = function (el, args) {
"use strict";
/** @private */
this.msg_ = "Hello World";
/**
* @this {foo}
* @return {string}
* @expose
*/
this.introduce = function () {
return this.msg_;
};
};
goog.exportSymbol('foo', foo);
通过在函数原型上定义方法,goog.exportSymbol
可以
用于导出构造函数和方法名称。
/**
* @param {Element} el
* @param {...*} args
* @constructor
*/
var foo = function (el, args) {
"use strict";
/** @private */
this.msg_ = 'Hello World!';
};
goog.exportSymbol('foo', foo);
/**
* @return {string}
*/
foo.prototype.introduce = function () {
return this.msg_;
};
goog.exportSymbol('foo.prototype.introduce', foo.prototype.introduce);
请参阅以下相关的stackoverflow问题: