Перейти к основному содержимому
Tooletto

Минификатор JS

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

  • Файлы никогда не покидают ваше устройство
  • Бесплатно, без регистрации
  • Без водяных знаков
  • Работает офлайн после загрузки
Loading tool…

Как пользоваться: минификатор js

  1. 1

    Вставьте код

    Вставьте любой валидный файл или фрагмент JavaScript.

  2. 2

    Выберите настройки

    Оставьте сокращение имён переменных включённым для минимального результата или отключите его, если результат нужно будет читать.

  3. 3

    Скопируйте результат

    Скопируйте минифицированный код вместе с информацией об экономии размера.

Что минификация на самом деле делает «под капотом»

Удаление пробелов и комментариев — простая, очевидная часть минификации, и сама по себе она почти не влияет на размер хорошо написанного кода. Настоящее сокращение размера достигается за счёт двух более глубоких преобразований: сокращения имён (mangling), которое переименовывает каждую локальную переменную и аргумент функции в максимально короткий идентификатор (`accumulator` становится `a`, `temporaryResult` становится `t`), и устранения мёртвого кода, которое удаляет ветви и выражения, для которых статический анализ кода может доказать, что они никогда не выполнятся и никак не повлияют на результат. Оба преобразования требуют реального понимания структуры кода — его областей видимости, того, какие имена локальные, а какие экспортируются, каких ветвей заведомо не достичь, — именно поэтому настоящий инструмент на основе парсера, такой как Terser, даёт заметно меньший результат, чем когда-либо смог бы наивный проход «найти и заменить» по пробелам.

Почему большинство разработчиков сегодня почти не пользуются отдельным минификатором

Сборщики вроде Webpack, esbuild, Rollup и Vite автоматически минифицируют свой результат в рамках продакшен-сборки, почти всегда используя под капотом Terser или совместимый с ним движок, — поэтому для тех, кто работает внутри современного JavaScript-проекта, минификация уже происходит незаметно при каждой сборке. Отдельный инструмент вроде этого закрывает случаи, выходящие за рамки такого конвейера: единственный тег скрипта без этапа сборки, быстрая проверка того, насколько сократится фрагмент кода, или разовый файл, который нужно сжать без подключения целой конфигурации сборщика ради этого одного случая.

Обратная операция форматированию, а не его замена

Минификация и форматирование — противоположные операции над одним и тем же кодом: этот инструмент убирает пробелы, структуру и читаемость, которые форматировщик вроде Prettier намеренно добавляет обратно. Его родственный инструмент, Форматировщик JavaScript, отменяет ровно то, что делает этот, — что полезно для обратного направления: взять минифицированный файл, который вам кто-то передал, и превратить его обратно во что-то достаточно читаемое, чтобы реально отлаживать.

Настоящий сборочный конвейер обычно сопровождает минификацию source map — отдельным файлом, который сопоставляет каждую позицию в минифицированном результате с исходной строкой в исходном коде, — специально для того, чтобы отладчик мог по-прежнему показывать читаемый код и правильные номера строк в продакшене, несмотря на то что реально выполняемый файл нечитаем. Этот отдельный инструмент намеренно не создаёт такой файл, поскольку он рассчитан на быстрое разовое сжатие, а не на продакшен-развёртывание; всё, что попадает в настоящий сборочный конвейер, должно проходить через сборщик, который выдаёт соответствующий source map вместе с результатом.

Часто задаваемые вопросы

Мой код отправляется на сервер?

Нет. Terser загружается в ваш браузер и работает там же — минификация происходит полностью на вашем устройстве. Проприетарный или внутренний код никогда не покидает ваш компьютер, чего нельзя сказать о большинстве онлайн-минификаторов.

Может ли минификация сломать мой код?

Как правило, нет, если всё сделано правильно — Terser разбирает ваш код в настоящее синтаксическое дерево, а не сопоставляет текст по шаблону, поэтому преобразованный результат в подавляющем большинстве случаев ведёт себя точно так же, как оригинал. Единственный по-настоящему крайний случай: код, который анализирует собственный исходный код во время выполнения, — например, вызывает `Function.prototype.toString()` у функции и разбирает результат, или полагается на имя переменной или функции как на строку (некоторые паттерны внедрения зависимостей так делают). Сокращение имён переименовывает сущности, поэтому подобная интроспекция после минификации может увидеть другие имена. Это редкость, но стоит иметь в виду, если ваш код делает что-то необычное с рефлексией.

Минифицированный результат остаётся валидным, работающим JavaScript?

Да. Результат — обычный JavaScript, просто короче. Его можно сразу поместить в тег `<script>` или в результат сборки точно так же, как вы поступили бы с исходным файлом.

Когда действительно стоит использовать этот инструмент?

Для продакшен-бандлов, скрипта, встраиваемого туда, где ограничен размер (расширение браузера, трекинг-скрипт, виджет с лимитом размера), или разового файла, который нужно быстро сжать без настройки сборки. Исходные или рабочие файлы минифицировать не стоит — держите их читаемыми и минифицируйте только итоговый результат сборки, так же как это делает сборщик.

Почему результат выглядит нечитаемым?

В этом и есть смысл. Пробелы, комментарии и длинные имена переменных существуют для людей, читающих исходный код, а не для движка JavaScript, который его выполняет. Их удаление (и сокращение имён, если включено сокращение переменных) уменьшает количество байт, передаваемых по сети, не меняя то, что делает код.