UglifyJS
Описание UglifyJS
Набор инструментов UglifyJS выполняет различные действия с кодом, написанном на JavaScript не изменяя его функциональность.
Программа умеет парсить, сжимать, обфусцировать или, наоборот, делать более читаемым скрипты JavaScript.
Домашняя страница: http://lisperator.net/uglifyjs/
GitHub: https://github.com/mishoo/UglifyJS
Автор: Mihai Bazon
Лицензия: BSD
Справка по UglifyJS
Использование:
uglifyjs [входные файлы] [опции]
UglifyJS может принять несколько входных файлов. Рекомендуется вначале передавать входные файлы, а затем опции. UglifyJS будет парсить входные файлы в последовательности, в которой они указаны и применять любые опции сжатия. Файлы анализируются в одной и той же глобальной области видимости, то есть ссылка из файла на некоторую переменную/функцию, объявленную в другом файле, будет сопоставлена надлежащим образом.
Если файл не указан, то UglifyJS будет считывать из стандартного ввода (STDIN).
Если вы хотите передать параметры перед входными файлами, отделите их двойным тире, чтобы входные файлы не трактовались в качестве аргументов параметров:
uglifyjs --compress --mangle -- input.js
Опции командной строки:
-h, --help Напечатать справку. `--help options` для подробностей о доступных опциях. -V, --version Напечатать номер версии. -p, --parse <опции> Опции парсера: `acorn` Использовать для парсинга Acorn `bare_returns` Разрешить return вне функций. Полезно когда обрабатываются модули CommonJS и Userscripts которые могут могут быть обёрнуты анонимной функцией (IIFE) с .user.js движком `caller`. `expression` Анализировать единичное выражение, а не программу (для разбора JSON). `spidermonkey` Исходить из того, что анализируемый файл в SpiderMonkey AST формате (как JSON). -c, --compress [опции] Включить сжатие/указать опции сжатия: `pure_funcs` Список функций, которые могут быть безопасно удалены когда их возвращаемые значения не используются. -m, --mangle [опции] Кромсать имена/указать опции искажения имён: `reserved` Список имён, которые не надо трогать. --mangle-props [опции] Кромсать свойства/указать опции искажения: `builtins` Изменять имена свойств, которые пересекаются со стандартными глобальными JavaScript. `debug` Добавить debug префикс и суффикс. `domprops` Изменять имена свойств, которые пересекаются со свойствами DOM `keep_quoted` Изменять только свойства, которые не помещены в кавычки. `regex` Менять только совпадающие с шаблоном имена свойств. `reserved` Список имён, которые не надо трогать. -b, --beautify [опции] Улучшить читаемость/указать опции вывода: `beautify` Включена с `--beautify` по умолчанию. `preamble` Преамбула для подготовки к выводу. Вы можете использовать это, чтобы вставить комментарий, например, для информации о лицензировании. Это не будет проанализировано, но исходная карта будет корректироваться с учётом его присутствия. `quote_style` Стиль кавычек: 0 - auto 1 - одинарные 2 - двойные 3 - исходные `wrap_iife` Обернуть IIFE в скобках. Примечание: вы можете отключить `negate_iife` в настройках компрессора. -O, --output-opts [опции] Указать опции вывода (`beautify` отключена по умолчанию). -o, --output <файл> Путь файла вывода (по умолчанию STDOUT). Укажите `ast` или `spidermonkey` для записи соответственно AST или SpiderMonkey как JSON в STDOUT. --comments [фильтр] Сохранить в выводе комментарий об авторских правах. По умолчанию это работает как Google Closure, сохраняя JSDoc-style комментарии, которые содержат "@license" или "@preserve". Опционально вы можете передать один из следующих аргументов в этот флаг: - "all" для сохранения всех комментариев - валидное выражение JS RegExp как `/foo/` или `/^!/` для сохранения только подходящих комментариев. Обратите внимание, что в настоящее время не все комментарии могут быть сохранены при включённом сжатии из-за удаления мёртвого кода или каскадных операторов в последовательности. --config-file <файл> Прочитать `minify()` опции из файла JSON. -d, --define <выражение>[=значение] Глобальные определения. -e, --enclose [аргумент[:значение]] Внедрить всё в большую функцию, с настраиваемыми аргументами и значениями. --ie8 Поддерживать не-стандартный Internet Explorer 8. Эквивалент установки `ie8: true` в `minify()` для `compress`, `mangle` и `output` опции. По умолчанию UglifyJS не будет пытаться что-то делать для IE. --keep-fnames Не кромсать/отбрасывать имена функций. Полезно для кода, полагающегося на Function.prototype.name. --name-cache <файл> Файл для хранения сопоставлений искажённых имён. --self Собрать UglifyJS как библиотеку (подразумевает --wrap UglifyJS) --source-map [опции] Включить карту ресурсов/указать опции карты ресурсов: `base` Путь для вычисления относительных путей из входных файлов. `content` Входная карта ресурсов, полезно если вы сжимаете JS который был сгенерирован из другого оригинального кода. Укажите "inline" если карта ресурсов включена внутри ресурсов. `filename` Имя файла и/или расположение источника вывода (устанавливает атрибут `file` в файле ресурсов). `includeSources` Передаёт флаг если вы хотите включить содержимое файлов ресурсов в в карту ресурсов как свойство sourcesContent. `names` Включает символьные имена в карту ресурсов. `root` Путь до оригинальных ресурсов для включения в карту ресурсов. `url` Если указана, путь до карты ресурсов добавляется в `//# sourceMappingURL`. --timings Отображение времени выполнения операций в STDERR. --toplevel Сжать и/или исказить переменные в области верхнего уровня. --verbose Печатать диагностические сообщения. --warn Печатать сообщения предупреждений. --wrap <имя> Внедрить всё в большую функцию, делая доступными переменные “exports” и “global”. Вам нужно передать аргумент в эту опцию для указания имени, которое возьмёт ваш модуль когда включён, допустим, в браузер.
Укажите --output (-o), чтобы указать выходной файл. В противном случае вывод показывается в STDOUT.
Руководство по UglifyJS
Страница man отсутствует.
Примеры запуска UglifyJS
Улучшить внешний вид файла /var/www/html/dvwa/vulnerabilities/javascript/source/medium.js, который будет передан из стандартного ввода:
cat /var/www/html/dvwa/vulnerabilities/javascript/source/medium.js | uglifyjs -b
Сжать и/или исказить переменные в области верхнего уровня, не соединять последовательные простые операторы, используя оператор запятой:
uglifyjs file.js -c toplevel,sequences=false
Установка UglifyJS
Установка в Kali Linux
sudo apt install uglifyjs
Установка в BlackArch
Программа предустановлена в BlackArch.
sudo pacman -S uglify-js
Установка на Debian, Linux Mint, Ubuntu
sudo apt update sudo apt install uglifyjs
Онлайн-сервис UglifyJS
Устанавливать программу на компьютер не обязательно, автор создал страницу, где можно попробовать UglifyJS: http://lisperator.net/uglifyjs/ (найдите надпись «Open demo»).
Вставьте свой код в левое поле. Нажмите «Uglify!» чтобы получить сжатый вывод справа. Левая часть превратится в редактор Ymacs. На этом этапе, если вы щёлкните любой токен в минифицированной области, то редактор слева переместится на исходное расположение минифицированного токена.
Установите флажок «As I type», чтобы включить минификацию на лету, по мере ввода.
Когда компрессор выдаст предупреждение, на панели инструментов появится мигающая кнопка. Щёлкните по ней, чтобы отобразить предупреждения (временно закрывает область с минимизированным кодом). Щёлкните предупреждение в списке, чтобы перейти к тому месту в исходном коде, которое его вызвало. Если у вас появились предупреждения при использовании «on-the-fly» и затем по мере ввода они были исправлены, список обновится автоматически.
Вы можете включить/выключить compressor (сжатие), mangler (искажение кода) и beautifier (улучшить читаемость кода). Для дополнительного контроля проверьте кнопки справа («Compressor…» и «Codegen…»). Эти параметры сохраняются в localStorage, они будут запомнены при следующем посещении той страницы.
Информация об установке в другие операционные системы будет добавлена позже.
Comments are Closed