Приложение Javascript для одной страницы
Я создал сложное одностраничное веб-приложение, управляемое ajax, которое использует серверный веб-сервис RESTful, обслуживающий JSON. Javascript разделен на множество разных файлов, каждый из которых представляет какую-то функцию или компонент.
Пока служба проходит тестирование alpha , я просто обслуживаю все эти файлы отдельно без минификации. Но теперь, когда я хотел бы запустить версию beta , мне действительно нужно объединить файлы, свернуть их и создать версию. Я хочу добавить это в свой процесс сборки, используя Maven.
Типы файлов Javascript
Я использую следующие «типы» файлов javascript, из которых # 3 и # 4 - мои проблемы:
- Внешние файлы, такие как jquery и jquery-ui, подаются из Google CDN. Редко меняйте эти версии, можно обрабатывать вручную.
- Плагины Jquery, которые я размещаю сам, такие как fullcalendar или ui-layout. Опять же, я редко обновляю их до новых версий и могу справиться с этим вручную.
- Код JavaScript для всего приложения. Пользовательский JavaScript, который распространяется по многим файлам и может время от времени меняться. Все эти файлы должны быть загружены для работы приложения.
- Функциональный код JavaScript. Пользовательский JavaScript, который загружается по требованию, когда запрашивается определенная функция. Этот код может изменяться довольно часто и не загружается при запуске.
Цели сборки
Я бы хотел сделать следующее в процессе сборки:
- Объедините все файлы javascript типа 3 вместе, уменьшите их и сохраните как один файл с номером версии. Например:
app-2.0.6.min.js
, где 2.0.6 - версия проекта maven.
- Все файлы типа 4 должны быть индивидуально сокращены и сохранены как отдельные файлы с номерами версий в названии. Например:
feature-abc-56ab32de29.min.js
, где 56ab32de29 - номер версии этого конкретного файла.
- Обновите HTML-файлы тегами
<script>
, чтобы они указывали на файлы javascript с правильными номерами версий.
- Обновите файлы Javscript, которые загружают файлы javascript типа 4, чтобы они указывали на правильные версии.
Вопросы
Есть ли плагин maven, который поможет с конкатенацией?
Есть ли плагин maven, который поможет с минификацией? В идеале я хотел бы использовать Google Closure Compiler, но, если проще, будет работать с другими.
Есть ли плагин maven, который поможет с версионированием?
Есть ли способ, чтобы файлы javascript типа 4 имели независимые номера версий? В идеале, если файл не изменяется между версиями 2.0.5 и 2.0.6, пользователям не нужно загружать новую версию, и их кэшированная версия будет работать нормально. Я использую GIT для управления исходным кодом, так есть ли способ использовать хэш-код файла GIT для управления версиями?
Есть ли решение, которое будет сжимать JavaScript, встроенный в обычные HTML-файлы, не убивая HTML?
Есть ли решение, которое будет сжимать и версировать мои CSS-файлы?