【问题标题】:Closure compiler ADVANCED_OPTIMIZATIONS force method rename?关闭编译器 ADVANCED_OPTIMIZATIONS 强制方法重命名?
【发布时间】:2015-08-26 01:41:02
【问题描述】:
有没有办法在 ADVANCED_OPTIMIZATIONS 模式下强制关闭编译器重命名/缩短 pushState() 方法,因为它没有在 History API 的上下文中使用?
/**
* @constructor
*/
function Moo() {}
Moo.prototype = {
pushState: function(foo) {
console.log(foo);
}
};
var moo = new Moo();
var y = moo.pushState("123");
与其他与数组上的本地方法同名的方法等相同。例如:myFoo.push() 其中myFoo 不是数组,而是对象或实例。
【问题讨论】:
标签:
google-closure-compiler
【解决方案1】:
重命名与外部文件中的任何属性共享名称的属性需要基于类型的优化。最新版本的编译器命令行版本默认启用这些。使用基于类型的优化,当编译器缺少类型信息时,属性不会被重命名。
但是,您的测试用例已通过基于类型的优化完全重命名。
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @use_types_for_optimization true
// @output_file_name default.js
// ==/ClosureCompiler==
/** @constructor */
function Moo() {}
Moo.prototype = {
pushState: function(foo) {
console.log(foo);
}
};
var moo = new Moo();
var y = moo.pushState("123");