如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
How to force Google Closure Compiler to rename methods even when using objects
似乎
谷歌闭包编译器(http://closure-compiler.appspot.com/home)在我使用"this."或使用揭示模块模式时保留了所有方法名称。它似乎仅在方法不在可能被其他外部方法引用的对象中时才将方法重命名为字母。我尝试包装我的(实用程序)对象和使用它的匿名方法,但这似乎没有帮助。如何创建可能相互共享的对象(和单独的脚本文件),并且仍然缩写所有方法名称?
我阅读了几篇关于 SO 的帖子,但没有看到任何解决此问题的内容,只有关于由于与外部变量冲突而未重命名的内容的帖子。
var Utility = (function () {
this.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
}
this.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
}
...
})();
然后我希望能够做到:
(function(u) {
u.isDefined();
})(Utility);
我也试过:
var Utility = (function () {
var utility = {};
utility.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
}
utility.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
}
return utility;
...
揭示对象模式不适用于闭包编译器。您使用的额外闭包也不会为窗口和文档全局变量添加别名。最后一个用例本身在闭包编译器中也是有问题的。目前,编译器不能很好地处理别名,尤其是在将命名空间作为函数参数传递时。
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
var Utility = {};
Utility.isDefined = function (v) {
/// <summary>Checks to see if a variable is defined.</summary>
return typeof v !== 'undefined';
};
Utility.isObj = function (v) {
/// <summary>Checks to see if a variable is an object.</summary>
return typeof v === 'object';
};
(function() {
function myPrivateFunction(x) {
}
Utility.SomeMethod = function(x) {
return myPrivateFunction(x);
};
})();
Utility.isDefined(x);
window['Utility'] = Utility;
此示例的编译和重命名可以在 http://closure-compiler.appspot.com/
您可以通过使用 output_wrapper
标志并正确导出符号来保护局部变量不渗入全局范围。
编译器还特别禁止在非构造函数、非原型函数中使用 this
关键字。应始终使用完整的命名空间。然后,编译器可以平展命名空间方法(这就是发生限制的原因)。
查看哪个编译级别适合我?
相关文章:
- Google Closure Advanced |无法识别对象属性|动态属性
- Google嵌入API cb=gap对象错误
- 为什么 Google 闭包编译器会重命名对象的属性名称
- 如何删除google.maps.Polyline对象
- 对象文字数据表中的 Google 可视化样式角色
- 将制表符分隔文件中的值传递给Google Maps对象
- 检测google.maps.MarkerImage对象是否为空
- 如何在 Google 闭包编译器中指定对象类型的@param @return
- Google 闭包编译器中的“全局此对象的危险使用”警告
- Google Apps 脚本:解析 XML 会导致错误:“无法在对象中找到函数 getChildren”
- 测试对象是否是 Google 闭包类框架中接口的实现
- 使用 Google Maps API 侦听器时检索 JavaScript 的事件对象
- Google script/JavaScript:这在对象后面做什么:(对象名称||{});.
- 如何使用google.maps.Rectangle对象在谷歌地图上绘制选择/边界框/矩形,并检查标记是否落在其中
- 如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
- Google Apps Script 返回 Code.gs 中的对象
- 使用 JSON.stringify 时将原型函数添加回返回的 Google Maps API 对象
- 如何从使用 API 返回的 JSON 对象初始化 google.maps.DirectionsResult
- Google Maps API v3 选择信息窗口作为 jquery DOM 对象
- 将coldfusion查询结果作为javascript对象(google maps)放入javascript数组中