我正在使用一个大型的JS库,该库使用ADVANCED_OPTIMIZATIONS
进行了最小化,并且我希望改变重命名成员的方式。
这是我输入的内容:
/**
* This is my class
* @constructor
* @param {string} name
* */
function MyClass(name) {
/**
* I want this public member to stay the same in the output since it will be exported
* @expose
* */
this.exposedMember = name;
/**
* But this member is meant to only be used by this class
* @private
* */
this.privateMember = "private";
}
var myObj = new MyClass("Jack");
myObj.exposedMember; // => "Jack"
myObj.privateMember; // => "private"
这是我得到的输出:
var myObj = new MyClass("Jack");
myObj.exposedMember; // => "Jack"
myObj.Rc; // => "private"
这是我想要作为输出的内容:
var myObj = new MyClass("Jack");
myObj.exposedMember; // => "Jack"
myObj._Rc; // => "private"
原因是我也在使用Google Maps JS API,并且有一些实例,我的私人成员从一个版本到另一个版本都与他们的成员发生冲突。控制我自己的私人成员后,我可以选择在其前面加上_
(或$
或其他名称)来解决此问题。
命令行中是否有什么可以帮助我做到这一点?如果没有,是否有Closure Compiler插件可以做到这一点?还有吗?
谢谢
答案 0 :(得分:0)
用于引导这种类型的重命名的选项不会通过命令行标志公开。这将需要自定义编译器版本。
通常,向外部对象添加属性总是很危险的,除非知道它们的完整定义。 Google Maps API在这方面特别棘手。
唯一安全的方法是为要扩展的Maps对象定义自定义外部元素:
外部:
/** @const */ google.maps.Marker.prototype.data = {};
来源:
const myMarker = new google.maps.Marker();
myMarker.data.mySafeProperty = 'foo';
但是,这会因真正的类扩展而破裂。不知道完整的类型签名绝对是不安全的。