Когда я был в похожей ситуации пару лет назад, я, кажется, вспомнил, что решение было, по сути, "чем больше, тем лучше"!
Сначала я запустил скрипт через Dojo Shrinksafe на очень скромных настройках сжатия. Поскольку он использует Rhino, он на самом деле интерпретирует JS, а затем записывает эквивалентную версию с синтаксически правильными точками с запятой.
Оттуда я подал выходные данные в / packer / Дина Эдварда, который (по крайней мере в то время) был библиотекой с самым высоким сжатием, которая производила последовательно функциональный вывод. Эта библиотека требует, чтобы вход имел точки с запятой, но это не было проблемой благодаря выводу из ShrinkSafe.
(Обратите внимание, что это из памяти, и я недавно не проверял его, но нет причины, по которой принцип больше не должен выполняться. Если ShrinkSafe не вставляет точки с запятой для вас, возможно, есть какая-то другая JS-предварительная обработка инструмент, который автоматически сделает это? По модулю, конечно, тот факт, что вставка точки с запятой не является на 100% детерминированной).