Как я могу сказать Closure Compiler не переименовывать внутреннюю функцию? Например, с учетом этого кода:
function aMeaninglessName() {
function someMeaningfulName() {
}
return someMeaningfulName;
}
... Я в порядке с Closure, переименовывающим внешнюю функцию (я активно этого хочу, чтобы сэкономить место), но я хочу, чтобы имя функции someMeaningfulName
оставалось в покое (чтобы имя, показанное в вызове, стекало для нее это "someMeaningfulName", а не "a" или что-либо еще). И это несмотря на то, что код, вызывающий его, будет делать это через ссылку, возвращаемую фабричной функцией, а не по имени в коде. Например, это только для поддержки отладки.
Обратите внимание, что я хочу, чтобы у функции было , имеющее фактическое имя , чтобы она не была анонимной и присваивалась какому-либо свойству, использующему это имя, поэтому, например, это не дубликат этот другой вопрос .
Этот несколько непонятный вариант использования, по-видимому, не охватывается ни внешними функциями, ни функциями экспорта. (Я надеялся, что там будет какая-то аннотация , которую я мог бы бросить на это.) Но я не гуру Closure Compiler, я надеюсь, что некоторые из вас. Естественно, если это просто невозможно, это приемлемый ответ.
(Вариант использования - это библиотека, которая создает функции в ответ на вызовы в нее. Я хочу предоставить версию библиотеки, которая была предварительно сжата с помощью Closure с SIMPLE_OPTIMIZATIONS, но если кто-то использует эту копию библиотеки с их собственный несжатый код и один шаг в функцию в отладчике [или других подобных операциях], я хочу, чтобы они увидели осмысленное имя. Я мог бы обойти его с помощью eval
или вручную отредактировать сжатый результат [на самом деле, контекст достаточно уникален, я мог бы бросить в него сценарий sed
, но это неловко и откровенно переносит нас на «не стоит беспокоиться» территорию, поэтому мы ищем простой, не требующий обслуживания способ.)