JavaScript: форматирование и минификация
Форматируйте JavaScript или минифицируйте его с настоящим сжатием и переименованием переменных
Об этом инструменте
Форматируйте JavaScript с единообразными отступами и пробелами — разверните вендорный бандл, чтобы прочитать, что он на самом деле делает, или приведите в порядок код, вставленный из консоли. Минификатор настоящий: Terser разбирает код в AST, удаляет мёртвый код, укорачивает имена локальных переменных и вырезает комментарии — тот же движок, который бандлеры используют в продакшене.
Поскольку минификация основана на AST, она никогда не ломает рабочий код так, как это умеют «компрессоры» на регулярных выражениях: строки, шаблонные литералы, регулярные выражения и краевые случаи ASI обрабатывает настоящий парсер. О синтаксических ошибках сообщается с позицией вместо выдачи испорченного вывода.
Terser загружается только при первой минификации, чтобы страница оставалась лёгкой, и работает целиком в вашем браузере — проприетарный исходник не покидает вашу машину.
Частые вопросы
- Насколько меньше станет мой код?
- Написанный вручную код обычно теряет 30–60% до gzip: столько весят пробелы, комментарии и длинные локальные имена. Уже собранный бандлером код сжимается куда меньше — он один раз через ту же трансформацию уже прошёл.
- Меняет ли минификация поведение?
- Сжатие и переименование сохраняют семантику: переименовываются только локальные имена, а устранение мёртвого кода удаляет ветки, которые доказуемо не могут выполниться. Классическое исключение — код, полагающийся на Function.prototype.name или toString() собственных функций.
- Можно ли этим де-минифицировать продакшен-код с сайта?
- Форматтер восстанавливает пробелы и структуру, что делает поток управления читаемым, — но исходные имена переменных и комментарии утеряны навсегда; вы увидите a, b, c. Для серьёзной отладки предпочитайте source maps, если сайт их отдаёт.
- Поддерживается ли TypeScript или JSX?
- Нет — обоим нужны собственные парсеры. Сначала скомпилируйте в JavaScript (tsc, esbuild), затем форматируйте или минифицируйте вывод здесь.