Просто запустите код через препроцессор C, а затем запустите этот вывод через минификатор. Препроцессор C на самом деле не специфичен для C, кроме обработки строковых литералов.
Пример:
cpp -DDev file.js /dev/stdout | jsmin > file-min.js
где file.js:
#if Dev
showLoginScreen();
#else
login("DevUser", "qwerty1");
#endif
будет включать в себя код разработчика и затем минимизировать его.
Чтобы сделать исходный код исполняемым как есть, вы можете добавить еще один шаг в конвейер обработки. Напишите свой код так:
//#if Dev
showLoginScreen();
//#else
login("DevUser", "qwerty1");
//#endif
и затем обработайте его следующим образом:
sed 's!^//#!#!' file.js | cpp -DDev /dev/stdin /dev/stdout | jsmin > file-min.js
Часть sed
служит для удаления ведущей //
из строк, начинающихся с //#
. cpp
затем предварительно обрабатывает источник в обычном режиме, и вывод из cpp
подается через jsmin
для минимизации.
Лучшее решение, вероятно, состоит в том, чтобы просто делать то же, что и программисты на С, и всегда надлежащим образом предварительно обрабатывать исходный файл перед выполнением. Вы можете отредактировать файл .jspp
(«pre-process JavaScript») и настроить свою систему на соответствующую предварительную обработку для разработки или развертывания всякий раз, когда вы что-то меняете. Если вы используете частое тестирование, вы можете сделать предварительную обработку частью вызова вашего инструмента тестирования.
(ПРИМЕЧАНИЕ. Командная строка может быть отключена; часть cpp получена из man-страницы, а часть jsmin - из файла исходного кода jsmin.c, поэтому я на самом деле не тестировал эту командную строку.)