Closure Compiler: как разделить и контролировать проходы компиляции/минификации?

Google Closure Compiler — это мощный компилятор и минификатор для JS, который предоставляет множество опций оптимизации, таких как переименование переменных, удаление мертвых кодов, свертывание объявлений переменных, переписывание структур потока управления и т. д.

Я хочу отдельно применить одну или несколько из этих оптимизаций к входной JS-программе. Например, я могу захотеть переименовать переменные с короткими именами, но не удалять мертвые коды. Как я могу добиться такого подробного контроля прохождения компиляции? Предоставляет ли исходный код CC определенные интерфейсы для выполнения этой настройки, или я должен написать свой собственный проход (если да, то как мне начать?).

Функции командной строки предлагают несколько вариантов управления компиляцией, но их недостаточно, чтобы соответствовать тому, что я хочу выше. Поскольку исходный код довольно сложен и можно найти мало подробной проектной документации, я действительно застрял здесь. Любые идеи будут оценены, спасибо :)




Ответы (1)


Взгляните на DefaultPassConfig. Этот класс перечисляет все проходы, выполняемые во время компиляции, в зависимости от того, какие параметры установлены в CompilerOptions. Некоторыми параметрами CompilerOptions можно управлять из командной строки, но обычно мы стараемся сделать компилятор относительно простым и удобным в использовании, а не просить пользователей принимать решения о наборе различных флагов компилятора. Кроме того, есть некоторые проходы, которые на самом деле увеличивают размер кода, но они делают это таким образом, что некоторым более поздним проходам легче уменьшить его впоследствии.

Конечно, если вы просто экспериментируете с компилятором или пытаетесь понять, как он работает, вы можете включать и выключать любые проходы, которые хотите, либо добавляя новые флаги, либо просто напрямую изменяя DefaultPassConfig.

person MatrixFrog    schedule 14.07.2015
comment
Многие из флагов контролируются CompilationLevel.java. Иногда проще изменить эти параметры. - person Chad Killingsworth; 14.07.2015
comment
Кстати, несколько членов команды довольно часто проверяют тег Stack Overflow google-closure-compiler и список рассылки, поэтому нет необходимости публиковать один и тот же вопрос в обоих местах. - person MatrixFrog; 14.07.2015