LINUX.ORG.RU

Посоветуйте js minifier.

 


0

3

Играюсь тут с Google Closure Compiler (GCC, не путать с GCC =)). Который раз уже. Время идёт, ничего не меняется: он слишком умный и слишком тупой одновременно.

На входе ES6-модули: export-ы, import-ы, всё такое. На выходе то же самое хочу.

В ADVANCED-режиме оно собирает всё в один файл и люто оптимизирует. Впечатляет, но не годится: если проект большой, грузить все скрипты при старте приложения – нехорошо. Например, не нужно грузить админские скрипты обычным юзерам.

В WHITESPACE_ONLY-режиме эта дрянь не ищет импортируемые модули в файловой системе, ей надо все зависимости явно в параметре --js указывать. Если не указать, то ругается на несуществующий импортируемый файл, хотя казалось бы – какая ей в жопу разница в WHITESPACE_ONLY-режиме-то? А если указать, то она опять же всё сконкатенирует в один файл, только теперь тупо в лоб и некорректно (import останутся, хотя импортируемый файл сконкатенирован в этот же исходник).

Хочется такую ужималку, чтобы:

  • сжимала каждый файл по-отдельности;

  • резала whitespaces и каменты;

  • внутри модуля переименовывала всё покороче;

  • export-ы не трогала;

  • ваще идеально если бы была аннотация «при сжатии переименовать в такое-то короткое имя», чтобы не случайно короткие имена выбирались;

  • и ещё идеальней если бы эту аннотацию можно было бы вешать на экспорты, и при обработке других файлов, где этот экспорт импортируется, она б тоже переименовывала.

★★★★★

Последнее исправление: dimgel (всего исправлений: 1)

я UglifyJS использую. Ну и общая сборка webpack-ом (там плюс eslint, babel и прочее).

P.S. Погуглил чутка… https://github.com/mishoo/UglifyJS2/issues/659 Так что terser юзай.

In case anybody else is as confused as I was an hour ago:

  • uglify-js has never supported ES6
  • uglify-es supports ES6 but was abandoned
  • tercer is a fork of uglify-es that is under active development
  • uglifyjs-webpack-plugin went from using uglify-js (no ES6) under the hood, to uglify-es (yes ES6), back to uglify-js (no ES6), and now uses tercer (yes ES6).

If you, like me, ever manually made an instance of uglifyjs-webpack-plugin in your config (probably to specify non-default options), you briefly had ES6 support but it went away again through no fault of your own. Switch to tercer-webpack-plugin, rename uglifyOptions to tercerOptions, and everything will probably be fine.

Qasta
()

братан, не мудри. Есть же стандартные решения - вебпак. Да может они не такие и эффективные, зато проверены десятками тысяч людей/компаниями. lazy loading (грузить все скрипты при старте приложения – нехорошо) там из коробки (настраивается флагами)

abs ★★★
()
Ответ на: комментарий от Qasta

Там пол года висел баг, из-за которого при определенных обстоятельствах код ломался. Было весело.

У меня в старых проектах еще где-то UglifyJS еще остался, но на новых везде валю на Terser.

Vit ★★★★★
()

Плюсану за terser, для статистики.

ddidwyll ★★★★
()
Ответ на: комментарий от Deleted

Всем спасибо, terser вполне шикарен. Дёшево и сердито. И стартует быстрее жавовского GCC.

dimgel ★★★★★
() автор топика
Последнее исправление: dimgel (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.