【发布时间】:2012-02-29 01:17:40
【问题描述】:
如何告诉闭包编译器不要重命名内部函数?例如,给定以下代码:
function aMeaninglessName() {
function someMeaningfulName() {
}
return someMeaningfulName;
}
...我对 Closure 重命名外部函数没问题(我积极希望它这样做,以节省空间),但我希望函数名称 someMeaningfulName 单独保留(以便调用堆栈中显示的名称为它是“someMeaningfulName”,而不是“a”或其他)。尽管调用它的代码将通过工厂函数返回的引用而不是代码中的名称来执行此操作。例如,这纯粹是为了调试支持。
请注意,我希望函数具有实际名称,而不是匿名的并使用该名称分配给某些属性,因此例如这不是this other question.
externs 或exports 功能似乎都没有涵盖这个有点晦涩的用例。 (我有点希望有一些annotation 我可以扔掉它。)但我不是闭包编译器大师,我希望你们中的一些人是。当然,如果没有办法做到这一点,这是一个可以接受的答案。
(用例是一个库,它创建函数以响应对其的调用。我想提供一个由 Closure 使用 SIMPLE_OPTIMIZATIONS 预压缩的库版本,但如果有人使用该库的副本他们自己的未压缩代码并在调试器[或其他类似操作]中单步进入函数,我希望他们看到有意义的名称。我可以用eval绕过它,或者手动编辑压缩结果[事实上,上下文足够独特,我可以向它扔一个sed 脚本],但这很尴尬,坦率地说,我们进入了“不值得打扰”的领域,因此寻找一种简单、低维护的方式。)
【问题讨论】: