Есть ли JavaScript-минификатор с условными директивами? - PullRequest
3 голосов
/ 25 августа 2011

Я ищу минификатор JavaScript, который будет иметь какую-то поддержку для чего-то похожего на директивы условной компиляции .

Так, например, оригинальный код JavaScript может выглядеть примерно так:

//#if Dev
    showLoginScreen();
//#else
    login("DevUser", "qwerty1");
//#endif

Таким образом, исходный код может содержать директиву #define Dev, но как только он будет запущен в производство, #define Dev будет удален, а минификатор исключит строку login("DevUser", "qwerty1"); из ее вывода.

Поддерживают ли какие-нибудь минифайеры такое поведение?

Ответы [ 2 ]

9 голосов
/ 25 августа 2011

Просто запустите код через препроцессор 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, поэтому я на самом деле не тестировал эту командную строку.)

0 голосов
/ 18 ноября 2017

Я посмотрел на препроцессор C и несколько других претендентов, основываясь на ответах на подобные вопросы. Затем нашел то, что я считаю лучшим ответом на сегодняшний день - PHP. Рассмотрим:

1) PHP действительно является препроцессором (это аббревиатура).

2) PHP готов к работе на большинстве серверов. Все, что вам нужно сделать, это либо изменить расширение вашего файла с «.js» на «.php» или «.js.php», либо (мое предпочтение), сделать простое редактирование файла конфигурации (подробности можно найти в другом месте). ).

3) Многие разработчики JavaScript уже знакомы с PHP или являются его экспертами.

4) PHP полон по Тьюрингу, в отличие от многих других препроцессоров.

5) Чтобы получить большую пользу, вам нужны только базовые знания PHP.

6) Существует гораздо больше документации / учебных пособий / форумов по PHP, чем у других препроцессоров.

Но в основном, это так странно, это круто. Спасибо тому, кто дал мне идею - я не могу найти их пост в данный момент.

...