Как вы автоматизируете минификацию Javascript для своих веб-приложений на Java?

121
задан 3 revs, 2 users 65% 19 March 2014 в 09:26
поделиться

5 ответов

Я думаю, вы идете не в том направлении - если бы компилятор мог написать полный и правильный конструктор копирования по умолчанию для каждого класса или структуры, тогда никто не стал бы жаловаться, разве они ? Проблема в том, что компилятор не может сделать это надежно, поэтому для таких случаев вам нужно написать свое собственное, переопределив значение по умолчанию.

и т.д.)
  • ant-yui-компрессор (задача ant для сжатия JS + CSS)
  • JAWR
  • Minify Maven Plugin
  • humpty
  • Ant exec задача с использованием Terser
  • 64
    ответ дан 24 November 2019 в 01:33
    поделиться

    Действительно поздно стороне здесь, но изображенный это могло бы помочь кому-то все еще поиск другого ответа:

    После попытки использовать Компрессор YUI, я был разочарован, что это было несовместимым с более поздними версиями jQuery и Призмы (две основных сторонних библиотеки JS, в которых я нуждался для своего проекта, который я хотел сжатый в единственный файл). Таким образом, я решил использовать Более краткий , который является ветвлением, Уродуют-JS, который поддерживает ES6 +. Я не смог заставить это выполнять непосредственно использование <exec>, задача, но использование метода командной строки Windows работает на Win 10, по крайней мере (не говоря, что это не может работать иначе, но это было очень легким обходным решением). Никакая потребность добавить что-либо еще к системной переменной Пути (как Узел. JS обычно добавляется во время установки). Я сначала использую МУРАВЬЯ <concat> задача сделать большой, несжатый файл. Используйте <fileset>, поскольку это сохранит порядок (если это будет важно, так или иначе).

    <concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
       <filelist refid="js-input-filelist"/>
    </concat>
    

    Затем используют <exec> задача запустить любую программу NPM, такой как Более краткую. страница руководства Apache на этой задаче указала, что это - обходное решение Windows для выполнения .bat файлы, но это действительно позволяет Вам выполненный примерно любое приложение командной строки (даже те, которые <exec> загадочно не могут найти иначе).

    <exec executable="cmd">
       <arg value="/c"/>
       <arg value="terser"/>
       <arg value="${js-big-file}" />
       <arg value="-o" />
       <arg value="${smaller-js-file}"/>  
    </exec>
    

    Интегрируются? Это - часть сценария сборки МУРАВЬЯ (DITA Открывают плагин Toolkit для поддержки пользовательского JavaScript, среди прочего - не веб-приложение Java, по сути, но Java использования для создания вывода HTML5), таким образом, интеграция не намного больше, чем добавляла те задачи к новой цели (существует больше кода относительно установки значений по умолчанию и проверки входных параметров!).

    Легкий Позволить/Запретить? В моем случае, у меня есть параметр, который я передаю Сборке МУРАВЬЯ для включения создания и уменьшения файла JS. Таким образом да, это только выполняет эту цель, если я установил параметрический усилитель на 'Да'. Это - довольно легкая вещь настроить в сборке МУРАВЬЯ.

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

    Более краткий Minifier, но Вы могли использовать примерно любого уменьшенного с входом командной строки с этим методом.

    функции Lack? Более краткий только [1 110] работы с JavaScript. Если я хочу сделать то же для своих файлов CSS (который я делаю), я использую Компрессор YUI.

    Как [1 126], Что это - в настоящее время активный проект и имеет хорошую поддержку. Плюс, текущая реализация (только называющий его через МУРАВЬЯ <exec> цель) позволяет мне выгружать minifiers, должен, я должен использовать что-то еще в будущем.

    не любят , Что это требует Узла. JS. Ничто против Узла. JS, заметьте, просто, что для этого конкретного проекта не нужен он иначе. Я очень предпочел бы использовать Java .jar файл как Компрессор YUI для этого (я могу легко распределить, это с плагином должно я нуждаться к).

    1
    ответ дан 24 November 2019 в 01:33
    поделиться

    Мы используем задачу Ant для минимизации файлов js с помощью YUICompressor во время производственной сборки и помещения результата в отдельную папку. Затем мы загружаем эти файлы на веб-сервер. Вы можете найти несколько хороших примеров интеграции YUI + Ant в этом блоге .

    Вот пример:

    <target name="js.minify" depends="js.preprocess">
        <apply executable="java" parallel="false">
            <fileset dir="." includes="foo.js, bar.js"/>
            <arg line="-jar"/>
            <arg path="yuicompressor.jar"/>
            <srcfile/>
            <arg line="-o"/>
            <mapper type="glob" from="*.js" to="*-min.js"/>
            <targetfile/>
        </apply>
    </target>
    
    13
    ответ дан 24 November 2019 в 01:33
    поделиться

    В нашем проекте это было решено несколькими способами, но мы продолжали использовать YUI Compressor в различных итерациях.

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

    Теперь среды разработки никогда не используют сжатый JavaScript для отладки. Вместо этого мы обрабатываем сжатие в нашем процессе сборки при экспорте нашего приложения в файл WAR.

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

    2
    ответ дан 24 November 2019 в 01:33
    поделиться

    Я пробовал два способа:

    1. с использованием фильтра сервлета. В производственном режиме фильтр активируется и сжимает любые данные, привязанные к URL, например * .css или * .js
    2. , используя maven и yuicompressor-maven-plugin ; сжатие выполняется una-tantum, (при сборке production war )

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

    Как он интегрируется? Является ли он частью вашего инструмента сборки, фильтра сервлета, отдельной программы, обрабатывающей файл WAR или чего-то еще?

    с использованием maven

    Легко ли его включать и отключать? Очень несмешно пытаться отладить миниатюрный скрипт, но это ' s также полезен для разработчика, чтобы иметь возможность проверить, что минификация ничего не ломает.

    вы активируете его только при сборке финальной войны; в режиме разработки вы видите несжатую версию ваших ресурсов

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

    абсолютно

    Какой минификатор он использует?

    Компрессор YUI

    Есть ли в нем какие-то функции, о которых вы можете подумать?

    нет, он очень полный и простой в использовании

    Что вы нравится?

    он интегрирован с моим любимым инструментом (maven), а плагин находится в центральном репозитории (хороший гражданин maven)

    7
    ответ дан 24 November 2019 в 01:33
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: