Минифицируйте сборкой, а не вручную

Как безопасно минифицировать JavaScript

Сохраните читаемые исходники, создавайте production-файлы одной повторяемой командой и подключайте их с новой версией. После сборки обязательно проверяйте синтаксис и реальные действия на сайте.

Процесс от исходного JavaScript через production-сборку к минифицированному файлу
Generated-файл не является местом для следующей ручной правки.

Самый безопасный путь

Сообщение разработчику

«Настройте production-минификацию собственных JavaScript из исходников, не обрабатывайте повторно vendor *.min.js, сохраните обязательные лицензии, source maps по политике проекта и версионирование кеша. Зафиксируйте размеры до/после и проверьте сборку, Console, формы, меню и ключевые сценарии».

Сделайте резервную копию исходников, lock-файла, manifest и шаблонов подключения. Работайте в отдельной ветке или тестовой среде; не заменяйте production-файл без быстрого способа вернуть предыдущий артефакт.

Пошаговая настройка

  1. В Network соберите URL собственных JS и запишите Resource Size, Transferred, Content-Encoding и инициатор.
  2. Найдите исходный entry point и существующий сборщик: Vite, Webpack, Rollup, esbuild или другой поддерживаемый инструмент.
  3. Установите зависимости из lock-файла и сначала воспроизведите текущую development/production-сборку без изменений.
  4. Включите production mode и поддерживаемую минификацию. Не копируйте секреты из окружения в клиентский bundle.
  5. Настройте source map с учётом доступа: публичная карта может содержать исходный текст; приватная карта должна попадать в систему ошибок, но не в публичный каталог.
  6. Добавьте content hash или обновляемую версию в manifest/URL, подключите созданные файлы в шаблоне.
  7. Запустите синтаксическую проверку, тесты и контрольные сценарии; сравните ответы без кеша.

Пример отдельного файла с Terser

npx terser src/app.js \
  --compress --mangle \
  --source-map "filename='app.min.js.map',url='app.min.js.map'" \
  --output public/js/app.min.js

Это пример для простого классического файла, а не универсальная команда для любого проекта. Для модулей, нескольких entry points, JSX/TypeScript и динамических импортов используйте production-настройку существующего сборщика.

Не включайте опасные преобразования вслепую

Код с eval, динамическими именами, reflection, глобальными API плагинов или неверными side-effects может сломаться при агрессивном mangling/tree shaking. Меняйте настройку по одной и тестируйте.

Откат и отдельные работы

Что проверить после сборки
ПроверкаХороший результатПри сбое
Build/ConsoleНет ошибок и отсутствующих чанковВернуть предыдущий manifest и артефакты
КешHTML ссылается на новый hashИсправить публикацию и очистку
ФункцииСценарии проходят с первого разаОтключить проблемное преобразование
Source mapСтек связан с исходником без утечки секретовИзменить режим публикации карты

Минификация не заменяет удаление неиспользуемого кода, code splitting, defer, Gzip/Brotli и исправление ошибок. После выпуска выполните независимую проверку.